Inserting Raw SQL
riseoflex88 opened this issue · 7 comments
// Destination ID's
$destinations = [75, 97, 103];
$fields = [];
foreach ($destinations as $destination_id) {
$fields[] = field('destination_id')->eq($destination_id);
}
// This works, but it's assuming there are always 3 elements
$this->sql_ob->andWhere(group(
$fields[0]
->or($fields[1])
->or($fields[2])
));
I need a function / method that can take the array of $queries, and add them into the andWhere statement. The problem is that the '->or' method is required on the subsequent elements.
If that's not possible, is there a method to add Raw SQL into a where statement?
It feels like this is still just as much a general php question as it is a Latitude question, I'll keep hunting for an answer myself but if anyone can put me out of my misery it'd be greatly appreciated.
Yay, got it...
Code fragment removed by @shadowhand because it is was vulnerable to SQL Injection.
Criteria is the key, make it in raw sql, then use criteria to interpret that into the Latitude format
Thanks again @shadowhand for a great package!
This seems like a situation where IN
would be appropriate:
$query->andWhere(field('pd.destination_id')->in($destinations));
@riseoflex88 definitely do not use the code you posted, see my edit above.
The code you suggested is where I started but didn't work for me, I think I must have overlooked the error's I was experiencing so tried a different route.
$query->andWhere(field('pd.destination_id')->in($destinations));
I'm not sure this is building the correct output when providing an array. If I provide an array as above, I get an "Array to string conversion" error and the SQL produced looks like:
WHERE pd.destination_id IN (Array)
However, if I convert to a string...
$query->andWhere(field('pd.destination_id')->in(implode(', ', $destinations)));
SQL Output:
WHERE pd.destination_id IN ("a, b, c")
It'll (obviously) wrap the string in quotes so the query will look for a destination id of "a, b, c"
I've tried looking through the latitude code for a suggestion on what needs to change, but I can't find one,
Ah, my mistake. I forgot to unpack:
$query->andWhere(field('pd.destination_id')->in(/* unpack change */ ...$destinations));
Let me know if that works.
Ah, perfect. Sorry that's me not understanding the use of ...
to even make a guess at adding that in there