Как получить данные через модель?

У меня модель 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 для этого запроса?

Действительно ли OrderPhoto-Photo - это связь "многие-ко-многим"? Для меня это не имеет особого смысла.

Martin Heralecký 19.11.2018 00:41

Вы можете использовать with для получения связанных таблиц в запросе. Взгляните на это. Заказ :: с ('related_table_name') -> get ();

InvincibleElf 19.11.2018 00:46

Мне нужно подключиться к модели через другую модель

OPV 19.11.2018 00:52

Похоже, заказ фото должен быть промежуточной таблицей между фото и заказами. В противном случае не имеет особого смысла.

Devon 19.11.2018 00:54

@OPV предоставляет образец данных в четырех (?) Таблицах и желаемый результат.

Kenny Horna 19.11.2018 00:56

См. Мое объяснение отношений между таблицами

OPV 19.11.2018 01:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
6
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто бегло взглянув на ваши отношения, кажется, что вы можете создать отношение 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')
}

С этой информацией немного сложно разобраться в структуре вашей БД, но, надеюсь, вы сможете с этим справиться. Это также может помочь

https://laravel.com/api/5.7/Illuminate/Database/Eloquent/Concerns/HasRelationships.html#method_hasManyThrough

Можете помочь с ключами в hasManyThrough?

OPV 19.11.2018 01:30

В моем случае OrderPhoto - это промежуточный стол.

OPV 19.11.2018 01:32

Я добавил запрос к вопросу

OPV 19.11.2018 01:40

У меня работает вот это: return $this->hasManyThrough('App\Photo', 'App\OrderPhoto', 'Photos_Id' , 'Id', 'Id', 'Orders_Id'); Я его поправлю?

OPV 19.11.2018 01:50

попробуйте запустить его, и если вы получите результаты, которые у вас есть после того, как он работает, иначе он обычно либо из-за ошибки, либо отправляет обратно пустую коллекцию

Josh 19.11.2018 01:54

Другие вопросы по теме