Статья была переслана из профессионального сообщества разработчиков laravel. Оригинальная ссылка: https://learnku.com/laravel/t
Laravel eloquent обычно возвращает в результате коллекцию, содержащую множество полезных и мощных методов. Вы можете легко фильтровать и изменять коллекцию. В этом учебном пособии будут рассмотрены общие методы и функции коллекций. Объединение наборов не ограничивается красноречивостью, но также может использоваться отдельно. Но результатом красноречивого является коллекция. Вы можете использовать вспомогательные функции собирать Преобразует массив в коллекцию. Методы сбора, перечисленные ниже, применимы как к красноречивым результатам, так и к самой коллекции.
Например, у вас есть модель публикации, в которой вы найдете все php Категории.
$posts = App\Post::where('category', 'php')->get();Приведенная выше команда возвращает коллекцию Коллекция-это класс laravel, который внутренне использует функции массива и добавляет к ним множество функций.
Вы можете просто использовать метод collect для создания коллекции, как показано ниже:
$collection = collect([
[
'user_id' => '1',
'title' => 'Helpers in Laravel',
'content' => 'Create custom helpers in Laravel',
'category' => 'php'
],
[
'user_id' => '2',
'title' => 'Testing in Laravel',
'content' => 'Testing File Uploads in Laravel',
'category' => 'php'
],
[
'user_id' => '3',
'title' => 'Telegram Bot',
'content' => 'Crypto Telegram Bot in Laravel',
'category' => 'php'
],
]);Приведенный выше массив на самом деле является значением модели post В этом уроке, мы будем использовать этот массив для упрощения, помните, что все будет основано на красноречивом таким же образом.
Когда мы используем вспомогательные методы в коллекции eloquent, мы больше не запрашиваем базу данных.Сначала мы получаем все результаты из базы данных, а затем используем метод сбора для фильтрации и изменения их без запроса базы данных.
фильтр()
Фильтр, один из наиболее полезных методов коллекции laravel, позволяет фильтровать коллекцию с помощью обратных вызовов, он передает только те элементы, которые возвращают значение true, Все остальные элементы были удалены. фильтр Возвращает новый экземпляр без изменения исходного, который он принимает значение и ключ В качестве двух параметров в обратном вызове.
$filter = $collection->filter(function($value, $key) {
if ($value['user_id'] == 2) {
return true;
}
});
$filter->all();Метод all возвращает базовый массив Приведенный выше код возвращает следующий ответ.
[
1 => [
"user_id" => 2,
"title" => "Testing in Laravel",
"content" => "Testing File Uploads in Laravel",
"category" => "php"
]
]поиск()
поиск Метод поиска набора с заданным значением. Если значение находится в коллекции, возвращается соответствующий ключ. Если ни один элемент данных не соответствует соответствующему значению, он вернет false 。
$names = collect(['Alex', 'John', 'Jason', 'Martyn', 'Hanlin']);
$names->search('Jason');
// 2Метод поиска по умолчанию использует свободное сравнение. Вы можете передать его во втором параметре true Используйте строгое сравнение.
Вы также можете передать свою собственную функцию обратного вызова в поиск Метод. Вернет ключ первого проверенного элемента, вызвав обратно истинное значение.
$names = collect(['Alex', 'John', 'Jason', 'Martyn', 'Hanlin']);
$names->search(function($value, $key) {
return strlen($value) == 6;
});
// 3кусок()
Метод chunk делит набор на меньшие наборы заданного размера. Полезно отображать коллекцию в виде сетки.
$prices = collect([18, 23, 65, 36, 97, 43, 81]); $prices = $prices->chunk(3); $prices->toArray();
Описанный выше эффект генерации кода.
[
0 => [
0 => 18,
1 => 23,
2 => 65
],
1 => [
3 => 36,
4 => 97,
5 => 43
],
2 => [
6 => 81
]
]дамп()
свалка Метод печати коллекции Его можно использовать для отладки и поиска содержимого в коллекции в любом месте.
$collection->whereIn('user_id', [1, 2])
->dump()
->where('user_id', 1);дамп Результат кода выше.
карта()
Метод map используется для обхода всей коллекции, он принимает обратный вызов в качестве параметра. значение и ключ Передается в обратный вызов Обратные вызовы могут изменять значения и возвращать их, наконец, возвращать новый экземпляр коллекции измененного элемента.
$changed = $collection->map(function ($value, $key) {
$value['user_id'] += 1;
return $value;
});
return $changed->all();В принципе, это будет идентификатор пользователя Увеличение на 1.
Ответ на приведенный выше код выглядит следующим образом.
[
[
"user_id" => 2,
"title" => "Helpers in Laravel",
"content" => "Create custom helpers in Laravel",
"category" => "php"
],
[
"user_id" => 3,
"title" => "Testing in Laravel",
"content" => "Testing File Uploads in Laravel",
"category" => "php"
],
[
"user_id" => 4,
"title" => "Telegram Bot",
"content" => "Crypto Telegram Bot in Laravel",
"category" => "php"
]
];застежка-молния()
Метод zip объединяет значения данного массива со значениями коллекции. Значения одного и того же индекса складываются вместе, что означает, что первое значение массива объединяется с первым значением коллекции. Здесь я буду использовать коллекцию, которую мы только что создали выше. Это также справедливо для набора красноречивых.
$zipped = $collection->zip([1, 2, 3]); $zipped->all();
Ответ JSON будет выглядеть следующим образом.
Так что в основном это так. Если длина массива меньше длины коллекции, Laravel выдаст остаток Коллекция Добавить в конце элемента типа null . Аналогично, если длина массива больше длины коллекции, laravel выдаст Коллекция Добавление элемента типа null , а затем значение массива.
Где нет()
Вы можете использовать метод whereNotIn , просто фильтрующий коллекцию по ключевым значениям, которые не включены в данный массив, который в основном связан с Где Наоборот. Кроме того, этот метод использует свободное сравнение при сопоставлении значений == 。
Давайте отфильтруем $коллекцию Среди них идентификатор пользователя Это тоже не так 1 Ни то, ни другое 2 .
$collection->whereNotIn('user_id', [1, 2]);Приведенное выше утверждение вернет только $collection Последний элемент в первом параметре-это ключ, а второй-массив значений.Если это красноречиво, первым параметром будет имя столбца, а вторым параметром будет массив значений.
макс()
Метод max возвращает максимальное значение данного ключа, наибольшее из которых вы можете найти, вызвав Max идентификатор пользователя . Обычно он используется для сравнения, например, цены или любого другого числа, но в демонстрационных целях мы используем идентификатор пользователя . Его также можно использовать для строк, в этом случае Z> a .
$collection->max('user_id');Приведенное выше утверждение вернет самый большой идентификатор пользователя В нашем случае 3 。
выщипать()
Метод pluck возвращает все значения указанного ключа, что полезно для извлечения значений столбца.
$title = $collection->pluck('title');
$title->all();Это выглядит так.
[ "Helpers in Laravel", "Testing in Laravel", "Telegram Bot" ]
При использовании eloquent вы можете передавать имена столбцов в качестве параметров для извлечения значений. pluck Также принимается второй параметр, который может быть другим именем столбца для коллекции красноречий.Это приводит к тому, что значением второго параметра является набор ключей.
$title = $collection->pluck('user_id', 'title');
$title->all();Результаты заключаются в следующем:
[
"Helpers in Laravel" => 1,
"Testing in Laravel" => 2,
"Telegram Bot" => 3
]каждый()
каждый Это простой способ выполнить итерацию всего набора, для которого требуется обратный вызов с двумя параметрами: элемент и ключ, по которым выполняется итерация, являются индексом на основе 0.
$collection->each(function ($item, $key) {
info($item['user_id']);
});Приведенный выше код записывает только идентификатор пользователя каждого элемента.
При повторном просмотре коллекции eloquent вы можете получить доступ ко всем значениям столбцов в качестве свойств элементов.Вот как мы повторяем все записи.
$posts = App\Post::all();
$posts->each(function ($item, $key) {
// Do something
});Если при обратном вызове возвращается значение false, итерация проекта прекращается.
$collection->each(function ($item, $key) {
// Tasks
if ($key == 1) {
return false;
}
});нажмите()
Метод tap() позволяет вам присоединиться к коллекции в любое время, когда он принимает обратный вызов и передает его, и передает коллекцию ему.Вы можете делать с проектом все, что угодно, не изменяя саму коллекцию, поэтому вы можете использовать tap для присоединения к коллекции в любое время без изменения коллекции.
$collection->whereNotIn('user_id', 3)
->tap(function ($collection) {
$collection = $collection->where('user_id', 1);
info($collection->values());
})
->all();В методе tap, используемом выше, мы изменяем коллекцию и записываем значение, которое вы можете делать с коллекцией все, что хотите, в ответ на приведенную выше команду:
[
[
"user_id" => "1",
"title" => "Helpers in Laravel",
"content" => "Create custom helpers in Laravel",
"category" => "php"
],
[
"user_id" => "2",
"title" => "Testing in Laravel",
"content" => "Testing File Uploads in Laravel",
"category" => "php"
]
]Вы можете видеть, что tap не изменяет экземпляр коллекции.
труба()
труба Метод очень похож на метод лента , потому что все они используются в конвейере сбора. канал Метод для передачи коллекции в обратный вызов и возврата результата.
$collection->pipe(function($collection) {
return $collection->min('user_id');
});Ответом на приведенную выше команду является 1 。 Если из трубы Обратный вызов возвращает экземпляр коллекции или связывает другие методы.
содержит()
содержит Метод проверяет только, содержит ли коллекция заданное значение.Это происходит, когда передается только один параметр.
$contains = collect(['country' => 'USA', 'state' => 'NY']);
$contains->contains('USA');
// true
$contains->contains('UK');
// falseЕсли пара ключ/значение передается методу contains, он проверяет, существует ли данная пара ключ/значение.
$collection->contains('user_id', '1');
// true
$collection->contains('title', 'Not Found Title');
// falseВы также можете передать обратный вызов в качестве аргумента методу обратного вызова. Обратный вызов будет выполняться для каждого элемента в коллекции, и если какой-либо из элементов пройдет проверку на истинность, он вернет true В противном случае вернет false .
$collection->contains(function ($value, $key) {
return strlen($value['title']) < 13;
});
// trueФункция обратного вызова принимает два значения параметров для текущего элемента итерации и ключа. Здесь мы просто проверяем, меньше ли длина заголовка 13. оставайтесь Telegram-бот Это 12 дюймов, поэтому он возвращает true 。
забыть()
забудьте Просто удалите предмет из коллекции, вам просто нужно передать ключ, и он удалит предмет из коллекции.
$forget = collect(['country' => 'usa', 'state' => 'ny']);
$forget->forget('country')->all();Приведенный выше код отвечает следующим образом:
[
"state" => "ny"
]забудьте Неприменимо к многомерным массивам.
среднее значение()
Метод avg возвращает среднее значение, которое вы просто передаете ключ в качестве аргумента, Метод avg возвращает среднее значение, которое вы также можете использовать средний Метод, это в основном средний Псевдоним.
$avg = collect([
['shoes' => 10],
['shoes' => 35],
['shoes' => 7],
['shoes' => 68],
])->avg('shoes');Приведенный выше код возвращает 30 Это среднее значение всех четырех чисел, если вы не передаете никаких ключей методу avg , и все элементы являются числами, что возвращает среднее значение всех чисел, если ключ не передается в качестве параметра, а коллекция содержит пару ключ/значение, метод avg возвращает 0.
$avg = collect([12, 32, 54, 92, 37]); $avg->avg();
Приведенный выше код возвращает 45.4 , что является средним значением всех пяти чисел.
Вы можете использовать эти методы сбора laravel для работы с коллекциями в своих собственных проектах.