Метод associate
Метод associate применяется к экземпляру модели для установки связи "принадлежит" (belongsTo). Первым параметром передаётся модель, с которой устанавливается связь. Метод добавляет соответствующий внешний ключ и возвращает текущую модель для дальнейшего использования. После вызова метода необходимо сохранить модель с помощью save, чтобы изменения были записаны в базу данных.
Синтаксис
<?php
$model->relation()->associate($relatedModel);
?>
Пример
Допустим, у нас есть модели Post и User. Каждый пост принадлежит одному пользователю. Установим связь для конкретного поста с пользователем:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Post extends Model
{
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
?>
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use App\Models\User;
class PostController extends Controller
{
public function associate()
{
$post = Post::find(1);
$user = User::find(2);
$post->user()->associate($user);
$post->save();
echo "Post user id: " . $post->user_id;
}
}
?>
Результат выполнения кода:
"Post user id: 2"
Пример
Метод associate также может принимать null, что позволяет разорвать текущую связь:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
class PostController extends Controller
{
public function dissociate()
{
$post = Post::find(1);
$post->user()->associate(null);
$post->save();
echo "Post user id: " . $post->user_id;
}
}
?>
Результат выполнения кода:
"Post user id: "
Пример
Метод associate может использоваться с существующей моделью, которую мы уже загрузили из базы данных. При этом модель не обязательно должна быть сохранена заранее:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use App\Models\User;
class PostController extends Controller
{
public function associate()
{
$post = new Post();
$post->title = 'New post';
$post->text = 'Content of new post';
$user = User::where('status', 'active')->first();
$post->user()->associate($user);
$post->save();
echo "New post created with user id: " . $post->user_id;
}
}
?>
Результат выполнения кода:
"New post created with user id: 1"
Смотрите также
-
метод
dissociate,
который разрывает связь "принадлежит" -
метод
saveMany,
который сохраняет множество связанных моделей -
метод
createMany,
который создаёт и сохраняет множество связанных моделей -
метод
save,
который сохраняет модель в базу данных