Сохранение и добавление моделей в Eloquent Laravel

Eloquent позволяет добавлять новые модели к отношениям. А так же вставлять модель в базу данных.

Добавление модели к отношению

К примеру, если нужно добавить новый комментарий к публикации, то вместо ручного добавления атрибута post_id (к комментарию) можно вставить комментарий, используя метод save:
<?php
$comment = new App\Comment(['message' => 'Тише, мыши, кот на крыше!']);

$post = App\Post::find(1);

$post->comments()->save($comment);
?>
В этом примере использовался метод "comments", чтобы получить экземпляр отношения. И метод "save" автоматически добавляет нужное значение post_id в новую модель "Comment".

Если нужно сохранить несколько связанных моделей, то можно использовать метод "saveMany", в атрибут которого можно передавать сразу несколько экземпляров "Comment", объединённые в массиве:
<?php
$post = App\Post::find(1);

$post->comments()->saveMany([
   new App\Comment(['message' => 'Тише, мыши, кот на крыше!']),
   new App\Comment(['message' => 'А котята ещё выше.']),
]);
?>
Обратите внимание, что при работе с отношениями "многие ко многим" необходимо использовать второй параметр метода "save", в который передаётся массив атрибутов дополнительных промежуточных таблиц:
<?php
App\User::find(1)->roles()->save($role, ['expires' => $expires]);
?>

Сохранение модели в базу данных

Метод "create" создаёт модель и вставляет её в базу данных. При этом принимая простой php массив в качестве параметра, а не экземпляр Eloquent (как в случае с методом "save"):
<?php
$post = App\Post::find(1);

$comment = $post->comments()->create([
   'message' => 'Тише, мыши, кот на крыше!',
]);
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб