$events=Event::all();
if (isset($scheduling) && $scheduling!=="All")
{
$events = $events->filter(function($event) use ($scheduling)
{
return $event->where('scheduling',$scheduling);
});
}
$events=$events->get();
有人可以更正此代码。内部过滤器不起作用。无论是否应用过滤器,结果都是相同的。我需要根据条件
应用这样的批量过滤器答案 0 :(得分:8)
您不必使用其中的条件,您可以从true
内返回false
或callback
,具体取决于选择条件。
下面的代码只会保留那些通过给定真值测试的events
:
$events=Event::all();
if (isset($scheduling) && $scheduling!=="All")
{
$events = $events->filter(function($event) use ($scheduling)
{
return $event->scheduling == $scheduling;
});
}
dd($events); //Collection
答案 1 :(得分:2)
另一个答案正确地解释了为什么你所做的不起作用,但这是另一种选择。
您可以使用构建器让数据库执行过滤,而不是从数据库中提取所有内容,然后将过滤器应用于集合。
$query = Event::query();
if (isset($scheduling) && $scheduling !== "All") {
$query = $query->where('scheduling', '=', $scheduling);
}
// add more wheres as needed
$events = $query->get();