如何通过模型检索数据?

时间:2018-11-18 23:36:43

标签: laravel laravel-5

我有一个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 :(得分: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