Как получить все экземпляры одного объекта в отношениях «многие ко многим» в Laravel?

#laravel #eloquent

#laravel #красноречивый

Вопрос:

У меня есть две таблицы, которые связаны друг с другом отношением «многие ко многим». Я установил запросы с помощью методов $this-> belongsToMany() с обеих сторон.

Одна таблица называется Device, другая — Pos. Я хочу получить доступ ко всем экземплярам устройства, связанным с этим Pos, в промежуточной таблице, используя Eloquent.

Это модель устройства:

 public function pos()
    {
        return $this->belongsToMany('AppPos', 'devices_pos')->withTimestamps();
    }
  

Это модель Pos:

 public function devices()
    {
        return $this->belongsToMany('AppDevice', 'devices_pos')->withTimestamps();
    }
  

Я не хочу отправлять запрос к БД прямо в таблицу ‘devices_pos’. Я хотел бы сделать это красноречивым способом.

Комментарии:

1. Вы хотите получить доступ к промежуточной таблице? Посмотрите здесь: laravel.com/docs/5.8 /…

Ответ №1:

Вы могли бы получить доступ ко всем устройствам из Pos, используя отношение:

 $pos = Pos::find($id);
$pos->devices; // this will return all the devices from that pos
  

И вы могли бы выполнить цикл для доступа к каждому атрибуту с каждого устройства:

 foreach($pos->devices as $device)
{
echo $device->anyDeviceAttribute;
}
  

Для получения дополнительной информации: Docs

Ответ №2:

Используйте атрибут pivot для доступа к промежуточной таблице после доступа к связи

 $pos = Pos::find($id);

foreach ($pos->devices as $device) {
    echo $device->pivot->created_at; //returns created_at on the intermedite table 'devices_pos'
}