Laravel пытается получить данные из сводной таблицы

#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