我正在尝试从Laravel 5.7中的 Collection 过滤几个项目 . 这些项目有一个startdate和一个(可选)enddate .
我正在尝试创建的过滤器如下 .
startdate <= now()
AND
( enddate >= now()
OR enddate = ''
OR enddate = NULL
)
我尝试了以下但它不起作用:
$this->items->where([
['startdate', '<=', date('Y-m-d'))],
['enddate', '>=', date('Y-m-d')]
])->orWhere([
['startdate', '<=', date('Y-m-d'))],
['enddate', '=', '']
])->orWhere([
['startdate', '<=', date('Y-m-d'))],
['enddate', '=', null]
]);
2 回答
感谢Marcin Nabialek,我得到了解决方案 .
我必须使用
$this->items()
而不是$this->items
并且必须使用->get()
函数附加它 .结果:
更清洁的方式是使用这样的闭包:
并且可能正如评论中建议的那样,您实际上应该使用
items()
而不是items
,因为使用items
您可能从数据库获取元素而不是之前向数据库查询添加约束 .