Laravel 集合 - 多个 where 条件
Posted
技术标签:
【中文标题】Laravel 集合 - 多个 where 条件【英文标题】:Laravel Collection - multiple where conditions 【发布时间】:2019-02-09 13:24:13 【问题描述】:有没有办法将多个 where 条件传递到 Laravel 的集合中?我的意思是:
$filters = [['col1', '=', 'val1'], ['col2', '=', 'val2']];
$found = $collection->where($filters)->first();
我知道它适用于 eloquent 查询构建器,但不适用于集合。我知道我可以链接多个 ->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
还要慢。
或者我可以以某种方式“重置” where 语句?
我在 foreach 循环中以不同的条件搜索它,这是一个问题。
【问题讨论】:
“克隆”与过滤任何东西有什么关系? 都在foreach循环内,条件不同,所以我需要在原始集合中搜索,没有where
。
【参考方案1】:
你总是可以使用你自己的闭包和过滤器:
$collection->filter(function ($item)
return $item->col1 == 'val1' && $item->col2 == 'val2';
);
【讨论】:
如您所见,我已经尝试过了(首先在这种情况下与过滤器相同),它比克隆慢;) 我想我不明白你的问题......当然它比克隆慢,克隆不需要比较任何东西。您的问题是您只想在找到第一个元素后停止过滤器吗? 我只是问有没有比克隆更快的东西。 但是 clone 只是创建了一个重复的对象,它没有过滤......那你为什么要比较两者呢? 我建议你澄清你的问题,因为标题和第一个陈述似乎与你真正想要的不符。以上是关于Laravel 集合 - 多个 where 条件的主要内容,如果未能解决你的问题,请参考以下文章
LARAVEL 5.8 - 在 foreach 中使用数组的 WHERE LIKE 子句的多个条件没有给出完整的结果
laravel orm where 条件中 mysql函数 怎么用
laravel orm where 条件中 mysql函数 怎么用