2016-07-18 8 views
5

Mam dwie tabele: users, orders. Próbuję uzyskać wszystkie zamówienia dla bieżącego użytkownika.Jak uzyskać dane z powiązanej tabeli w Laravel (od jednego do wielu)?

Users Orders 
_____ ______ 
id | name id | user_id 

modelu użytkownika:

public function orders(){ 
    return $this->hasMany("App\Order"); 
} 

modelu produktu:

public function user(){ 
    return $this->hasOne("App\User", 'user_id', 'id'); 
} 

Zapytanie w kontrolerze:

public function index() 
{ 

    $orders = Order::where('user_id', Auth::guard('api')->id())->get(); 
    return response()->json(
     $orders->user 
    ); 
} 

Otrzymuję wynik NULL, robię coś nie tak, ponieważ w obu tabelach są powiązane wiersze.

+0

Funkcja kontroler nie będzie działać, ponieważ 'get()' Metoda zwraca kolekcję i starasz się uzyskać właściwość 'użytkownik portu od a kolekcja, która nie ma sensu. Co powinna zrobić ta funkcja? –

+0

Potrzebuję więc uzyskać wszystkie informacje o użytkowniku z tabeli "Użytkownicy" i uzyskać to samo żądanie wszystkich zamówień użytkownika. Co zamiast 'get()' powinienem użyć? – Dev

+0

Co się dzieje przy użyciu 'Auth :: user() -> id' zamiast' Auth :: guard ('api') -> id() '? Otrzymuję zero używając tego, co masz. –

Odpowiedz

1

Jeśli chcesz odzyskać wszystkie zamówienia należące do do bieżącego użytkownika, spróbuj użyć następującej funkcji.

public function index() 
{ 
    $orders = Auth::user()->with('Orders')->get()->toArray();//To get the output in array 
    /*  ^   ^
    This will get the user | This will get all the Orders related to the user*/ 

    return response()->json($orders); 
} 

Jak podkreślił @Martin Heralecký, będzie trzeba także zmienić hasOne() do belongsTo() w celu Model. Zobacz następne (skopiowane z @Martin Heralecký odpowiedzi)

public function user(){ 
    return $this->belongsTo("App\User");// second and third arguments are unnecessary. 
} 

Dlaczego belongsTo():

has_one i belongs_to generalnie są takie same w tym sensie, że wskazują one na innych powiązanych modelu. belongs_to upewnij się, że ten model ma zdefiniowany klucz foreign_key. has_one zapewnia, że ​​zdefiniowany jest inny model has_foreign.

Twój $orders tablica będzie wyglądać mniej więcej tak:

User => [ 
id => 'user id', 
name => 'user name' 
orders => [ 
    0 => [ 
     //order data 
     ] 
    1 => [ 
     //order data 
     ] 
     . 
     . 
     . 
     . 
    ] 
] 
1

W modelu zamówienia trzeba użyć belongsTo zależność:

public function user() 
{ 
    return $this->belongsTo("App\User"); // second and third arguments are unnecessary. 
} 
+0

Powraca ponownie 'Null', bez pól z tabeli' Użytkownik' – Dev

1

W modelu użytkownik może użyć hasMany relacji, na przykład (w app/User.php):

public function orders() 
{ 
    return $this->hasMany("App\Order", "user_id", "id"); 
} 

teraz możesz użyć tego:

return User::find(1)->orders; 
+0

Czy mogę uzyskać wszystko w jednym wyniku? – Dev

Powiązane problemy