2014-11-06 6 views
13

Po prostu zaczynam od Laravel, więc proszę, wybacz noobness.Laravel shouldTo zwracanie wartości null podczas używania 'with'

Mam modelu User i Order, użytkownik ma wiele zamówień:

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

Więc myślę, że mam powyższy prawo.

Ale kiedy to zrobić:

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

uzyskać Call to a member function addEagerConstraints() on null.

Jednakże, jeśli mogę to zrobić na odwrót, to działa świetnie:

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

Co robię źle/co nie rozumiem ?! A może mój problem jest większy niż myślę?

Baza:

enter image description here

Odpowiedz

45

Problemem jest to, że nie mają return dla swojej relacji orders. Powinno to być:

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

Powinieneś także używać w swoich relacjach wielkości liter. pokazałeś:

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

działa, ale należy raczej używać

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

aby uniknąć dodatkowych zapytań do bazy danych w przyszłości

+1

Dziękuję za dodatkową informacją oraz – Djave

+0

tnx Marcin Nabiałek –

+0

Dzięki @Marcin. Ocalił dzień –