我有一个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
?
答案 0 :(得分: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')
}
使用此信息来引导您的数据库结构有些困难,但是希望您应该能够解决它。这可能也有帮助