laravel - 如何通过模型检索数据?
问题描述
我有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
这个查询?
解决方案
只需快速查看您的关系,您就可以在订单模型上创建 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')
}
使用这些信息来了解您的数据库结构有点困难,但您应该希望能够解决它。这也可能有帮助
推荐阅读
- google-cloud-platform - 尝试在 google oauth 中为同意屏幕注册应用程序时出现问题
- rundeck - 如何在计划作业中设置不同的 Rundeck 用户?
- python - 数据框按多个子列对值进行排序
- docker - Docker:安装期间的回声输入
- javascript - React:在道具中传递的函数未定义
- c++ - 我的程序没有正确输出结构中的学生数量
- c# - 将 nameof 用于递归泛型类型的属性
- sql - SQL ORDER BY IN SELECT FROM STRING SPLIT 或逗号分隔值
- python - Python:检查用户输入猜测任何项目
- docker - docker 卷权限问题