Коллекция Laravel - несколько условий - PullRequest
0 голосов
/ 04 сентября 2018

Есть ли способ передать кратные условия в коллекцию 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 голосов
/ 04 сентября 2018

Вы всегда можете использовать свое собственное закрытие с фильтром:

$collection->filter(function ($item) {
   return $item->col1 == 'val1' && $item->col2 == 'val2';
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...