Laravel foreach" where"雄辩的

时间:2014-11-25 04:09:45

标签: laravel laravel-4 eloquent

我有某些字段和数据值无法硬编码到查询中。我想要得到这样的东西:

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();

**这就是我的**

    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();

2 个答案:

答案 0 :(得分:5)

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

一个你没有正确链接,两个你错误地使用了querybuilder闭包。如果你想像循环那样执行逻辑,那么你必须分解查询。使用where闭包就像在你的条件周围写一个括号。

类似的东西:

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

粗略地转化为:

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

答案 1 :(得分:4)

这样的事情应该有效:

$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();