2017-06-20 67 views
5

Pracuję nad witryną, która ma rozszerzone modele, np.Laravel Wymowne relacje z rozszerzonymi modelami

class Asset extends Model { 

    public function project() { 
    return $this->belongsTo(Project::class); 
    } 
} 

class Video extends Asset { 

} 

Czy muszę ustalić taką samą belongsTo wymowne relacje z rozszerzonego klasy, albo ze względu na klasy dominującej mającej go będzie laravel zrobić z resztą?

Dodatkowo, czy istnieje jakakolwiek dokumentacja, która zawiera szczegółowe informacje na temat struktury takich relacji (np. W kategoriach Kontrolerów)? Nie mogę znaleźć niczego na (zazwyczaj doskonałej) stronie Laracast.

+1

jeśli nie zastąpisz projektu, to zostanie on odziedziczony po rodzicu. – apokryfos

+0

Zobacz ten post: https://stackoverflow.com/questions/4961906/when-to-implement-and-extend –

Odpowiedz

2

Nie musisz dwukrotnie wprowadzać rozszerzonej metody, chyba że chcesz zastąpić ją innym zachowaniem.

Osobiście używam sporej części dziedziczenia w moich aplikacjach i działa tak, jak można się spodziewać, każda relacja działa poprawnie i wysyła zapytania za pomocą domyślnych wartości nadrzędnych lub określonych deklarowanych zmiennych chronionych.

Na przykład, jeśli zadeklarujesz chronione $table = 'foo', dziecko również przyjmie tę zmienną, aby wykonać zapytanie, lub możesz zastąpić ją na potomku, aby wysłać zapytanie do innej tabeli od rodzica.

Jeśli chodzi o dokumentację, powód, dla którego nie znajdujesz zbyt dużej ilości informacji, wydaje mi się, że jest to bardziej problem związany z PHP i OOP niż konkretny framework.

Jeśli chcesz zadeklarować stosunki polimorficzne, które są bardzo popularnym sposobem wdrożenia wielokrotne dziedziczenie w swoim SQL laravel ma plecy, ze szczególnym Eloquent relations i migration commands, jak $table->morphs('asset');.

Mam nadzieję, że to pomoże.