Метод createMany
Метод createMany применяется к отношению типа hasMany или morphMany и позволяет создать несколько связанных моделей за один вызов. В качестве параметра метод принимает массив массивов, где каждый внутренний массив представляет собой атрибуты для создания одной модели. Метод возвращает коллекцию созданных моделей.
Синтаксис
<?php
$parentModel->relation()->createMany([
['column1' => 'value1', 'column2' => 'value2'],
['column1' => 'value3', 'column2' => 'value4'],
]);
?>
Пример
Давайте создадим несколько статей для автора с идентификатором 1:
<?php
use AppModelsAuthor;
use AppModelsArticle;
$author = Author::find(1);
$articles = $author->articles()->createMany([
[
'title' => 'article 1',
'content' => 'content for article 1',
'status' => 'published'
],
[
'title' => 'article 2',
'content' => 'content for article 2',
'status' => 'draft'
],
[
'title' => 'article 3',
'content' => 'content for article 3',
'status' => 'published'
]
]);
foreach ($articles as $article) {
echo $article->title . "\n";
}
?>
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Метод createMany можно использовать с данными из внешнего источника. Давайте создадим несколько комментариев к посту:
<?php
use AppModelsPost;
use AppModelsComment;
$post = Post::find(1);
$comments = $post->comments()->createMany([
['text' => 'comment 1', 'author_id' => 2],
['text' => 'comment 2', 'author_id' => 3],
['text' => 'comment 3', 'author_id' => 4]
]);
foreach ($comments as $comment) {
echo $comment->text . "\n";
}
?>
Результат выполнения кода:
"comment 1"
"comment 2"
"comment 3"
Пример
Метод createMany автоматически заполняет внешний ключ для всех создаваемых моделей. Давайте проверим это, создав несколько записей через метод и выведем их идентификаторы:
<?php
use AppModelsCustomer;
use AppModelsOrder;
$customer = Customer::find(1);
$orders = $customer->orders()->createMany([
['total' => 100, 'status' => 'pending'],
['total' => 200, 'status' => 'confirmed'],
['total' => 150, 'status' => 'pending']
]);
foreach ($orders as $order) {
echo $order->customer_id . " - " . $order->total . "\n";
}
?>
Результат выполнения кода:
"1 - 100"
"1 - 200"
"1 - 150"
Смотрите также
-
метод
saveMany,
который сохраняет множество существующих моделей через отношение -
метод
create,
который создаёт одну модель через отношение -
метод
firstOrCreate,
который находит или создаёт запись -
метод
updateOrCreate,
который обновляет или создаёт запись