使用过滤方法过滤Laravel雄辩的集合

时间:2015-07-27 15:59:18

标签: php laravel laravel-4 laravel-5

  $events=Event::all();
  if (isset($scheduling) && $scheduling!=="All")
  {
     $events = $events->filter(function($event) use ($scheduling)
     {
        return $event->where('scheduling',$scheduling);
      });
   }
  $events=$events->get();

有人可以更正此代码。内部过滤器不起作用。无论是否应用过滤器,结果都是相同的。我需要根据条件

应用这样的批量过滤器

2 个答案:

答案 0 :(得分:8)

您不必使用其中的条件,您可以从true内返回falsecallback,具体取决于选择条件。

下面的代码只会保留那些通过给定真值测试的events

   $events=Event::all();

   if (isset($scheduling) && $scheduling!=="All") 
   {  
      $events = $events->filter(function($event) use ($scheduling)
      {
         return $event->scheduling == $scheduling;
       });
    }

   dd($events); //Collection

Read More

答案 1 :(得分:2)

另一个答案正确地解释了为什么你所做的不起作用,但这是另一种选择。

您可以使用构建器让数据库执行过滤,而不是从数据库中提取所有内容,然后将过滤器应用于集合。

$query = Event::query();
if (isset($scheduling) && $scheduling !== "All") {
    $query = $query->where('scheduling', '=', $scheduling);
}
// add more wheres as needed
$events = $query->get();