我正在尝试按日期过滤掉对象。我通过以下方式得到它们:
$result1 = $events->where('event_date', '<', Carbon::now());
哪个工作正常......但是现在我想将事件拆分为通过但未通过,所以我尝试了:
get()
但它返回空集合。如果我添加$result1 = $events->where('is_featured', 1);
,则会给我一个错误。奇怪的是,如果我这样做:
EnumMap
这有效,只返回特色元素。我做错了什么?
答案 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());
});