有没有一种方法可以将多个条件传递到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循环中搜索它,这是一个问题。
答案 0 :(得分:1)
您始终可以将自己的闭包与过滤器一起使用:
$collection->filter(function ($item) {
return $item->col1 == 'val1' && $item->col2 == 'val2';
});