Laravel Collection-多个条件

时间:2018-09-04 13:29:19

标签: php laravel collections

有没有一种方法可以将多个条件传递到Laravel的收藏夹中?我的意思是:

$filters = [['col1', '=', 'val1'], ['col2', '=', 'val2']];
$found = $collection->where($filters)->first();

我知道它可用于雄辩的查询生成器,但不适用于集合。我知道我可以链接多个->where语句(即使在foreach循环内),但是我需要具有原始的集合对象,并且克隆它可以,但是速度不是很快。

$localCollectionObject = $localCollection->first(function ($value, $key) use ($remoteCollectionObject, $compareColumnNames)  {
    foreach ($compareColumnNames as $compareColumnName) {
        if ($value->{$compareColumnName} != $remoteCollectionObject[$compareColumnName]) {
            return false;
        }
    }
    return true;
});

这也可以,但比clone $localCollection还要慢。

还是我可以以某种方式“重置”语句?

我正在不同条件下的foreach循环中搜索它,这是一个问题。

1 个答案:

答案 0 :(得分:1)

您始终可以将自己的闭包与过滤器一起使用:

$collection->filter(function ($item) {
   return $item->col1 == 'val1' && $item->col2 == 'val2';
});