Laravel 属于在使用 'with' 时返回 null

2022-08-30 22:39:48

我刚刚开始使用Laravel,所以请原谅任何新手。

我有一个和型号,一个用户有很多订单:UserOrder

# 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;

我做错了什么/我不明白什么?!还是我的问题比我想象的要大?

数据库:

enter image description here


答案 1

问题是你没有你的关系。它应该是:returnorders

public function orders(){
    return $this->hasMany('Order');
} 

您还应该使用区分大小写的关系。你展示了:

$orders = Order::with('User')->get();

正在工作,但你应该宁愿使用

$orders = Order::with('user')->get();

以避免将来对数据库进行额外查询


答案 2

对于遇到这种情况的任何其他人来说,我遇到了同样的问题,但我的问题是我交换了外/本地密钥。例:

// 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 关系,外键是第二个参数,本地键是第三个参数。但是,对于属于到关系,这两者是交换的。


推荐