Laravel foreach "where" with eloquent

I have certain fields and data values ​​that cannot be hardcoded into a query. I am trying to get something like this:

return Listing::where('id', $id)
            ->where(function($query) use ($input) {
                 ->where('field_1', 'foo_1')
                 ->where('field_2', 'foo_2')
                 ->where('field_3', 'foo_3') 
            }
            ->get();

      

** Here I have **

    return Listing::where('id', $id)
        ->where(function($query) use ($input) {
            $i = 0;
            foreach ($input as $key => $value) {
                $i++;
                // ->where('field_1', red_1); // Desired output
                ->where("where(field_{$i},".$value."_1)");
                // $query = $query."where(field_{$i},".$value."_1)"."<br>";
                // return $query prints out the following
                /*
                    field_1 red_1,
                    field_2 foo_1,
                    field_3 bar_3
                */
            }
        })
        ->get();

      

+3


source to share


2 answers


Something like this should work:



$listing = Listing:where('id', $id);
foreach ($input as $key => $value) {
     $i++;
     // ->where('field_1', red_1); // Desired output
     $listing->where("where(field_{$i},".$value."_1)");
}
$results = $listing->get();

      

+3


source


$query = Listing::where('id', $id);
$i = 0;
foreach ($input as $key => $value) {
     $i++;
     $query->where('field_'.$i,$value.'_'.$i);
}
return $query->get();

      

That you are chaining incorrectly, and two, you are using the closing querybuilder incorrectly. If you want to execute the logic like a loop, then you need to split the query. Also, using a closure is like writing parentheses around your conditions.

Something like:



  $query->where('bacon', $foo)
  $query->where(function ($query) use ($bar, $baz){
       $query->where('apple', $bar);
       $query->orWhere('orange', $baz)
  });

      

Roughly translate to:

  WHERE bacon = $foo AND (apple = $bar OR orange = $baz)

      

+4


source







All Articles