Дополнительные возможности связей моделей в Laravel
В предыдущих уроках мы разобрали основные виды связей. Сейчас посмотрим ещё несколько полезных приёмов.
Проверка наличия связей
Метод has оставляет только те
записи, у которых есть связанные:
<?php
$users = User::has('posts')->get();
?>
Метод doesntHave - наоборот,
только записи без связей:
<?php
$users = User::doesntHave('posts')->get();
?>
Сохранение связанных моделей
Для связи один ко многим новую запись можно сохранить через отношение:
<?php
$user = User::find(1);
$post = new Post([
'title' => 'title',
'text' => 'text',
]);
$user->posts()->save($post);
?>
Можно создать сразу несколько:
<?php
$user->posts()->create([
'title' => 'title',
'text' => 'text',
]);
?>
Для связи многие ко многим используют
attach, detach и sync:
<?php
$post = Post::find(1);
$post->tags()->attach([1, 2, 3]);
$post->tags()->detach([2]);
$post->tags()->sync([1, 3, 5]);
?>
Получите только тех юзеров, у которых есть посты.
Получите юзеров без постов.
Через отношение сохраните новый пост для выбранного юзера.
Привяжите к посту несколько тегов
через attach, затем синхронизируйте
список через sync.