Laravel where子句

时间:2017-01-18 22:43:53

标签: php laravel

我正在尝试按日期过滤掉对象。我通过以下方式得到它们:

$result1 = $events->where('event_date', '<', Carbon::now());

哪个工作正常......但是现在我想将事件拆分为通过但未通过,所以我尝试了:

get()

但它返回空集合。如果我添加$result1 = $events->where('is_featured', 1); ,则会给我一个错误。奇怪的是,如果我这样做:

EnumMap

这有效,只返回特色元素。我做错了什么?

1 个答案:

答案 0 :(得分:1)

正如您在问题中所述,$ events是一个集合,而不是一个查询。 Collection上的where()方法的工作方式略有不同。

对于集合,where()方法不接受运算符。它只进行相等比较。第一个参数是键,第二个是值,第三个是用于标记松散比较(==)与严格比较(===)的布尔值。

您正在寻找的是filter()方法。你传递一个Closure进行你的日期比较。如果Closure返回true,则该项目将保留在Collection中。如果返回false,则从Collection中删除该项。像这样的东西(只是一个例子,逻辑可能需要调整):

$filteredEvents = $events->filter(function ($item) use ($date) {
    return (data_get($item, 'event_date') > $date) && (data_get($item, 'event_date') < $date->endOfDay());
});