У меня модель Order с другим родством OrderPhoto:
public function OrderPhoto()
{
return $this->hasMany('App\OrderPhoto');
}
В свою очередь модель OrderPhoto имеет отношение:
public function Photo()
{
return $this->belongsToMany('App\Photo');
}
Итак, как получить данные из OrderModel с соответствующими данными из третьей модели Photo?
Я предполагаю это:
Order::with("OrderPhoto.Photo")->get();
для получения только данных из модели Photo для каждого Order
Итак, у каждого Order есть свой OrderPhotos. Отношения - один ко многим.
Но один элемент из OrderPhotos связан с первичным ключом из таблицы Photos. Это отношение один к одному.
Мой запрос результата должен быть:
select `photos`.*, `ordersphoto`.`Orders_Id` from `photos` inner join `ordersphoto` on `ordersphoto`.`Photos_Id` = `photos`.`Id` where `ordersphoto`.`Orders_Id` in (1);
Как использовать hasManyThrough для этого запроса?
Вы можете использовать with для получения связанных таблиц в запросе. Взгляните на это. Заказ :: с ('related_table_name') -> get ();
Мне нужно подключиться к модели через другую модель
Похоже, заказ фото должен быть промежуточной таблицей между фото и заказами. В противном случае не имеет особого смысла.
@OPV предоставляет образец данных в четырех (?) Таблицах и желаемый результат.
См. Мое объяснение отношений между таблицами






Просто бегло взглянув на ваши отношения, кажется, что вы можете создать отношение hasManyThrough в модели заказа.
public function Photo {
return $this->hasManyThrough('App\OrderPhoto', 'App\Photo')
}
Вам может потребоваться добавить ключи таблицы, чтобы она работала
Это позволит вам:
Order::with("Photo")->get();
Вы можете увидеть более подробную информацию здесь https://laravel.com/docs/5.5/eloquent-relationships#has-many-through
Обновлять
Попробуй это
public function Photo {
return $this->hasManyThrough('App\Photo', 'App\OrderPhoto', 'Order_id', 'Photos_id', 'id', 'id')
}
С этой информацией немного сложно разобраться в структуре вашей БД, но, надеюсь, вы сможете с этим справиться. Это также может помочь
Можете помочь с ключами в hasManyThrough?
В моем случае OrderPhoto - это промежуточный стол.
Я добавил запрос к вопросу
У меня работает вот это: return $this->hasManyThrough('App\Photo', 'App\OrderPhoto', 'Photos_Id' , 'Id', 'Id', 'Orders_Id'); Я его поправлю?
попробуйте запустить его, и если вы получите результаты, которые у вас есть после того, как он работает, иначе он обычно либо из-за ошибки, либо отправляет обратно пустую коллекцию
Действительно ли OrderPhoto-Photo - это связь "многие-ко-многим"? Для меня это не имеет особого смысла.