【问题标题】:Laravel Collection - multiple where conditionsLaravel 集合 - 多个 where 条件
【发布时间】: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

标签: php laravel collections


【解决方案1】:

你总是可以使用你自己的闭包和过滤器:

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

【讨论】:

  • 如您所见,我已经尝试过了(首先在这种情况下与过滤器相同),它比克隆慢;)
  • 我想我不明白你的问题......当然它比克隆慢,克隆不需要比较任何东西。您的问题是您只想在找到第一个元素后停止过滤器吗?
  • 我只是问有没有比克隆更快的东西。
  • 但是 clone 只是创建了一个重复的对象,它没有过滤......那你为什么要比较两者呢?
  • 我建议你澄清你的问题,因为标题和第一个陈述似乎与你真正想要的不符。
猜你喜欢
  • 2017-11-02
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2017-02-05
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多