кодесурса
«Laravel

Laravel (5.7) Коллекции

script1adsense2code
script1adsense3code

Laravel Eloquent использует Коллекции для возврата результатов. Коллекции содержат очень полезные методы, которые делают их очень мощными и полезными для использования. Вы можете фильтровать их, изменять их и многое другое с ними очень удобно. В этом уроке мы рассмотрим методы сбора laravel.

Коллекции не только ограничены красноречивыми результатами, но могут использоваться отдельно. Красноречивые результаты используют сборники. Вы можете просто создать коллекцию, передав массив для сбора вспомогательной функции. Все перечисленные ниже методы следующей коллекции применимы как к красноречивым коллекциям, так и к самим коллекциям.

Допустим, у вас есть модель поста. Вы найдете все сообщения с категории php.

$posts = App\Post::where('category', 'php')->get();

Приведенная выше команда возвращает коллекцию. Коллекция - это класс laravel, который использует массивы внутри и добавляет к ним множество функций.

Вы можете создать коллекцию просто с помощью метода сбора, подобного этому.

$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. В этом уроке мы будем использовать этот массив для упрощения. Помните, что все будет работать одинаково и для красноречивых.

Вот как вы можете просто создавать коллекции. Вы можете применить все вспомогательные методы сбора, доступные в Laravel.

Когда мы применяем вспомогательные методы к красноречивым коллекциям, они не запрашивают базу данных. Все результаты, которые мы хотим получить из базы данных, сначала берутся, а затем мы используем методы сбора для фильтрации и изменения их без каких-либо запросов к базе данных.

фильтр()

Фильтр, один из самых полезных методов сбора данных 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
    ]
]

дамп ()

Метод dump сбрасывает элементы коллекции. Это полезно для отладки и поиска содержимого коллекции в любой точке конвейера сбора.

$collection->whereIn('user_id', [1, 2])
    ->dump()
    ->where('user_id', 1);

дамп ответа из приведенного выше кода.

«Laravel

карта()

Метод map используется для перебора всей коллекции. Он принимает обратный вызов в качестве аргумента. значение и ключ передается в обратный вызов. Обратный вызов может изменить значения и вернуть их. Наконец, возвращается новый экземпляр коллекции измененных элементов.

$changed = $collection->map(function ($value, $key) {
    $value['user_id'] += 1;
    return $value;
});
 
return $changed->all();

По сути, он увеличил user_id на единицу.

Ответ из приведенного выше кода выглядит следующим образом.

[
    [
        "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 выглядит следующим образом.

«JSON

Вот и все. Если количество массивов меньше количества коллекций, laravel добавит ноль в конце оставшихся элементов коллекции. Кроме того, если количество массивов больше, чем количество коллекций, laravel добавит ноль для элементов коллекции, за которым следует последующее значение массива.

whereNotIn ()

Вы можете использовать метод whereNotIn для простой фильтрации коллекции по значению ключа, не содержащемуся в данном массиве. Это в основном противоположность где. Кроме того, этот метод использует свободное сравнение == при сопоставлении значений.

Давайте отфильтруем коллекцию $, где user_id не равен ни 1, ни 2.

$collection->whereNotIn('user_id', [1, 2]);

Вышеприведенный оператор вернет только последний элемент из коллекции $ collection, созданной выше. Первый аргумент является ключом, а второй аргумент является массивом значений. В случае eloquent первым аргументом будет имя столбца, а вторым аргументом будет массив значений.

Максимум()

Метод max возвращает максимальное значение данного ключа. Вы можете найти максимальное значение user_id, вызвав макс. Обычно он используется для таких вещей, как цена или любое другое число, но для демонстрации давайте используем user_id. Он также может использоваться со строками, и в этом случае Z> a.

$collection->max('user_id');

Вышеупомянутое утверждение вернет максимальное значение 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']);
});

Выше, это просто регистрация user_id каждого элемента.

При регистрации в красноречивых коллекциях вы можете получить доступ ко всем значениям столбца в качестве свойств элемента. Вот как мы можем перебирать все сообщения.

$posts = App\Post::all();
 
$posts->each(function ($item, $key) {
    // Do something
});

Если вы вернете false из вашего обратного вызова, он прекратит итерации по элементам.

$collection->each(function ($item, $key) {
    // Tasks
    if ($key == 1) {
        return false;
    }
});

нажмите()

Метод 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"
    ]
]

Вы можете видеть, что тап не изменяет экземпляр коллекции. Узнайте больше о функции помощника касания и методе сбора касания подробно.

Труба ()

Метод pipe очень похож на метод tap в том смысле, что оба они используются внутри конвейера сбора. Метод pipe передает коллекцию обратному вызову и возвращает результат.

$collection->pipe(function($collection) {
    return $collection->min('user_id');
});

Ответ от вышеприведенной команды: 1. Если вы возвращаете экземпляр коллекции из обратного вызова канала, вы можете также связать другие методы.

содержит()

Метод contains просто проверяет, содержит ли коллекция заданное значение. Это верно только тогда, когда вы передаете один аргумент.

$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 Bot это 12, поэтому он вернул true.

забыть ()

забудьте просто удалить предмет из коллекции. Вы просто передаете ключ, и он удалит этот элемент из коллекции.

$forget = collect(['country' => 'usa', 'state' => 'ny']);
 
$forget->forget('country')->all();

Ответ из приведенного выше кода:

[
    "state" => "ny"
]

забудьте не работает на многомерных массивах.

ср ()

Метод avg возвращает среднее значение. Вы просто передаете ключ в качестве аргумента, а метод 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 (5.7) Кеш
Следующая: Laravel (5.7) События

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code