#laravel #eloquent #laravel-8 #laravel-relations
#laravel #красноречивый #laravel-8 #laravel-отношения
Вопрос:
У меня есть отношение «многие ко многим», которое правильно вставляет данные, но когда я пытаюсь получить данные, оно не дает мне никаких данных.
одна таблица — босс, а другая — рабочие
Migration
<?php
public function up()
{
Schema::create('boss_worker', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('worker_id');
$table->unsignedBigInteger('boss_id');
$table->timestamps();
});
}
Отношение модели босса
public function workers()
{
return $this->belongsToMany(AppModelsAdminWorker::class,'boss_worker');
}
Как я пытаюсь получить данные
public function index()
{
$boss = Boss::find(1);
dd($boss->workers);
}
Как я вставляю данные
$input = $request->all();
$workers = $input['workers'];
$input['workers'] = implode(',', $workers);
$boss = Boss::where('staff_id',$request->boss)->first();
$worker_gangs = $boss->workers()->sync($workers);
Он не извлекает никаких данных
Комментарии:
1. Можете ли вы показать дамп нашего
$input['workers']
при вставке данных?
Ответ №1:
использовать
public function index()
{
$boss = Boss::with('workers')->find(1);
}
Комментарии:
1. Спасибо за предоставленный ответ. Не могли бы вы отредактировать свой ответ, чтобы включить объяснение вашего кода? Это поможет будущим читателям лучше понять, что происходит, и особенно тем членам сообщества, которые новички в языке и пытаются понять концепции.
Ответ №2:
Когда вы вызываете связь из модели, к которой вы обращаетесь IlluminateDatabaseEloquentBuilder
, вы можете получить доступ и применить любой фильтр или запрос с помощью построителя запросов, чтобы извлечь данные из этой связи, вы должны использовать эти методы для выполнения запроса
->get();
->first();
ваш код должен быть:
$boss = Boss::find(1);
$workers = $boss->workers()->get();
dd($workers);
или вы можете выполнить быструю загрузку с помощью модели Boss
$boss = Boss::with('workers')->find(1);
dd($boss->workers);