首页 > 解决方案 > 如何通过模型检索数据?

问题描述

我有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这个查询?

标签: laravellaravel-5

解决方案


只需快速查看您的关系,您就可以在订单模型上创建 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


推荐阅读