在Laravel 4.1中过滤对象

时间:2016-01-05 19:45:26

标签: php laravel laravel-4

我是Laravel和php的新手,我正面临一个集合的问题。该集合以这种方式生成:

$users = $media->campaign->users;

返回此数据:

[{id: 1, name: "name", suspended: 0},{id: 2, name: "name2", suspended: 1}]

如何在laravel 4.1中过滤此对象以仅获取0为暂停的元素?

2 个答案:

答案 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只进行直接等于比较。这让很多人感到高兴。