Как получить данные через модель? - PullRequest
0 голосов
/ 19 ноября 2018

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

1 Ответ

0 голосов
/ 19 ноября 2018

Если вы просто посмотрите на ваши отношения, вы увидите, что вы можете создать отношение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...