我是Laravel和php的新手,我正面临一个集合的问题。该集合以这种方式生成:
$users = $media->campaign->users;
返回此数据:
[{id: 1, name: "name", suspended: 0},{id: 2, name: "name2", suspended: 1}]
如何在laravel 4.1中过滤此对象以仅获取0为暂停的元素?
答案 0 :(得分:1)
使用array_filter(array $array[, callable $callback[, int $flag]])
:
array_filter($users, function($value) {
return($value->suspended === 0);
});
在Laravel 4.2 documentation中查看更多内容,Taylor在那里写道,过滤集合使用array_filter
函数。您还应该使用$users = $users->filter(function($user) {});
方法。
另外,感谢@xAoc,您可以对SQL查询使用过滤:
$users = $media->campaign
->users()
->where("suspended", "=", 0)
->get();
答案 1 :(得分:0)
由于您正在进行直接的“等于”比较,因此Laravel的Collection具有您可以使用的where()
方法。例如:
$users = $media->campaign->users;
$users->where('suspended', 0);
如果您已经拥有Collection,这是一个不错的选择。但是,如果您可以控制生成集合,那么仅获取您正在寻找的实际数据会更有益。在这种情况下,您可以将where子句添加到SQL语句中,这样您将只检索所需的最终记录。例如:
$users = $media->campaign->users()->where('suspended', '=', 0);
注意:集合上的where()
方法和查询构建器上的where()
方法具有不同的签名。查询构建器允许您传入运算符以使用('=','>','<'等)。 Collection只进行直接等于比较。这让很多人感到高兴。