2014-11-06 3 views
13

Я только начинаю с Laravel, поэтому, пожалуйста, простите любую пустоту.Laravel belongsTo возвращает null при использовании 'with'

У меня есть модель 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; 

Что я делаю неправильно/что не понимаю ?! Или моя проблема больше, чем я думаю?

База данных:

enter image description here

ответ

45

Проблема в том, вы не имеете return для orders отношений. Это должно быть:

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

Вы также должны использовать свои отношения с регистром. Вы показали:

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

работает, но вы скорее должны использовать

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

избежать дополнительных запросов к базе данных в будущем

+1

Спасибо за дополнительную информацию, а также – Djave

+0

TNX Marcin Nabialek –

+0

Спасибо @Marcin. Сохранено в день –

Смежные вопросы