Рубрики
Uncategorized

Пятнадцать общих коллекций laravel

Автор оригинала: David Wong.

Статья была переслана из профессионального сообщества разработчиков 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 для работы с коллекциями в своих собственных проектах.