РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
199 of 1392 menu

Метод 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,
    который сохраняет модель в базу данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить