Skip to content
Advertisement

Laravel belongsTo returning null when using ‘with’

I’m just getting started with Laravel so please forgive any noobness.

I have a User and Order model, a user has many orders:

# 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');
}

So I think I have the above right.

But when I do this:

 $users = User::with('orders')->find(1);
 return $users;

I get Call to a member function addEagerConstraints() on null.

However, if I do it the other way around, it works great:

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

What am I doing wrong / what don’t I understand?! Or is my problem bigger than I think?

Database:

enter image description here

Advertisement

Answer

The problem is you don’t have return for your orders relationship. It should be:

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

You should also use your relationships case sensitive. you showed:

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

is working, but you should rather use

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

to avoid extra queries to your database in future

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement