#php #laravel #many-to-many #pivot-table #laravel-blade
#php #laravel #многие ко многим #сводная таблица #laravel-blade
Вопрос:
я пытаюсь получить данные, связанные с моей моделью, из сводной таблицы (отношение «многие ко многим»). я ставлю клиентов на отношения «многие ко многим» с отделами.
миграция:
Schema::create('customer_department', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('customer_id');
$table->unsignedBigInteger('department_id');
$table->timestamps();
$table->foreign('customer_id')
->references('id')
->on('customers');
$table->foreign('department_id')
->references('id')
->on('departments');
});
модель клиента:
public function department(){
return $this->belongsToMany('AppDepartment');
}
модель отдела:
public function customer(){
return $this->belongsToMany('AppCustomer');
}
теперь я пытаюсь распечатать каждый отдел, которому клиент назначен в представлении. я пытался
{{$customer->department}}
or
@foreach($customer->department as $depo)
{{$depo->name}}
@endforeach
or
{{$customer->pivot->department_id}}
...
контроллер:
public function show(Customer $customer)
{
return view('/customers/customer', ['customer' => $customer]);
}
однако я получаю несколько сообщений об ошибках, пустые массивы или ничего не исправляю. что я делаю не так? что я забыл?
Комментарии:
1. как вы извлекли эту
$customer
запись?2. я добавил функцию контроллера
Ответ №1:
У вас должна быть модель, полученная через отношение «Многие ко многим», чтобы к ней была присоединена эта pivot
модель. $customer
не было бы этого pivot
, но все, что было возвращено, было бы связано с $customer->department
этими pivot
моделями:
@foreach ($customer->department as $department)
{{ $department->pivot->department_id }}
@endforeach
Однако в этом случае вам не нужно использовать сводную модель, поскольку вам нужна информация из моделей отдела:
@foreach ($customer->department as $department)
{{ $department->getKey() }}
{{ $department->name }}
@endforeach
Было бы неплохо назвать эти отношения во множественном числе, поскольку они возвращают много, а не в единственном числе.
Комментарии:
1. работает как шарм, так как я хочу распечатать имя вместо -> department_id я сделал -> name . спасибо: D: D