我正在使用Laravel创建一个应用程序,而我正试图与Eloquent合作。我有两个表:订单和物品。
每个项目都有一个类型(int数据):
每个订单都有一本书和很多视频。
在我的订单模型中,我希望有一本书和其他项目的关系。所以,我有这个代码:
public function book()
{
return $this->hasMany('App\Item')->where('type', 1)->first();
}
public function others()
{
return $this->hasMany('App\Item')->where('type', '!=', 1)->get();
}
但是,如果我使用我的关系急切加载,我收到一个错误:
Order::with(['book', 'others'])->get();
你能帮我解决这个问题吗?
由于
答案 0 :(得分:0)
定义这样的关系以使代码有效:
public function book()
{
return $this->hasOne('App\Item')->where('type', 1);
}
public function others()
{
return $this->hasMany('App\Item')->where('type', '!=', 1);
}
但是,在没有where
约束的情况下定义关系会更好:
public function book()
{
return $this->hasOne('App\Item');
}
public function others()
{
return $this->hasMany('App\Item');
}
然后这样做:
Order::with(['book' => function ($q) {
$q->where('type', 1);
},
'others' => function ($q) {
$q->where('type', '!=', 1);
}])
->get();