我刚刚开始使用Laravel,所以请原谅任何无知。
我有User
和Order
型号,用户有很多订单:
# Inside User model
public function orders()
{
$this->hasMany('Order');
}
# Inside Order
public function user()
{
return $this->belongsTo('User');
}
// Not sure if this is upsetting anything (also in Order)
public function products()
{
return $this->belongsToMany('Product');
}
所以我认为我有上述权利。
但是当我这样做时:
$users = User::with('orders')->find(1);
return $users;
我得到Call to a member function addEagerConstraints() on null
。
但是,如果我反过来这样做,那就很有效:
$orders = Order::with('User')->get();
return $orders;
我做错了什么/我不懂什么?!或者我的问题比我想的更大?
数据库:
答案 0 :(得分:49)
问题是,您return
关系没有orders
。它应该是:
public function orders(){
return $this->hasMany('Order');
}
您还应该使用区分大小写的关系。你表示:
$orders = Order::with('User')->get();
正在运作,但您应该使用
$orders = Order::with('user')->get();
以避免将来对您的数据库进行额外的查询
答案 1 :(得分:0)
对于遇到此问题的其他人,我也遇到了同样的问题,但是我的问题是交换了外键/本地键。示例:
// This is correct for hasX relationships
public function user() {
return $this->hasOne('App\Models\User', 'user_id', 'local_key_user_id');
}
// This is correct for belongsTo relationships
public function user() {
return $this->belongsTo('App\Models\User', 'local_key_user_id', 'user_id');
}
请注意,对于hasX关系,外键是第二个参数,本地键是第三个参数。但是,对于belongsTo关系,将这两个交换。