2017-05-10 13 views
6

Szybkie zapytanie dotyczące niektórych relacji modelu danych w Laravel.morphTo i hasMany Laravel

Mam produkt, który należy do użytkownika, ale użytkownik może mieć wiele produktów. Ale produkt może mieć także wiele osób, które składają ofertę na ten produkt;

class Product extends Model 
{ 
    public function user(){ 
     return $this->belongsTo('App\User'); 
    } 
    public function offer(){ 
     return $this->hasMany('App\Offer'); 
    } 

Ale produkt może mieć również różne rodzaje sub produktu, na przykład, można być pojazd, lub telefon komórkowy, każdy z różnych kolumn w moim migracji, więc zakładam, że muszę morph wiele

W Product.php

public function imageable() 
{ 
    return $this->morphTo(); 
} 

W Vehicle.php

public function products() 
{ 
    return $this->morphMany('App\Product', 'imageable'); 
} 

Jednak podczas rozmowy:

$product = Product::findOrFail($id); 

uzyskać zerowy, gdy próbuję zrobić coś podobnego $product->vehicle

dodam identyfikator pojazdu w mojej bazy danych do imageable_id na stole produktów, a typem imageable "pojazd" również na stole produktów.

Co ja tu robię źle?

Odpowiedz

5

Wszystko wygląda w porządku po prostu powinien być dostęp do niej poprzez imageable:

$product = Product::findOrFail($id); 
return $product->imageable; 

Od laravel documentation:

Można również pobrać właściciela polimorficznych związku z polimorficznych modelu przez dostęp do nazwy metody, która wykonuje wywołanie morphTo.

W twoim przypadku metoda, która wykonuje połączenie z numerem morphTo, można zobrazować.

+0

To mnie jeszcze bardziej dziękuję, ale teraz dostaję "pojazd" klasy "nie znaleziono" ' – iLC

+0

Jak przechowujesz dane w tabeli polimorficznej? W bazie danych imageable_type powinno wyglądać tak: 'App \ Vehicle' –

+0

Ach masz rację, to była aplikacja \ Vehicle w bazie danych, dzięki Chase !! (zaznaczę to poprawnie, gdy SO mi pozwoli) – iLC