2013-01-11 31 views
5

Chciałbym stworzyć kilka do komentowania modeli dla projektu, ale nie mogę znaleźć żadnych odniesień do tworzenia skryptu migracji komentarzy, Znalazłem tylko ten film na vimeo: Laravel 4 - Eloquent Collections & Polymorphic Relations.Czy Laravel Schema połączyła polimorficzne skojarzenia po wyjęciu z pudełka?

Czy mam dodawać wyraźnie kolumny polimorficzne?

Schema::create('comments',function($table){ 
    $table->increments('id'); 
    $table->text('body'); 
    $table->string('commentable_type'); 
    $table->integer('commentable_id'); 
    $table->timestamps(); 
}); 

Pytanie jest jako budowniczy zrobić oczekuje programista, gdy klucz jest kluczem obcym jak w $table->foreign('user_id')->references('id')->on('users');

Odpowiedz

0

połączenia polimorficzne to nic wspólnego ze schematu, są wymownym funkcja, która pozwala relacje być zbudowany między każdym innym typem modelu.

Można sprawdzić dokumentację dla tego:

http://four.laravel.com/docs/eloquent#relationships

+2

Rozumiem, że schemat i elokwentny są różnymi pojęciami. Zastanawiam się, czy istnieje skrót do dodawania kolumn polimorficznych, tak jak '$ table-> timestamps()'. Przypuszczam, że oznaczałoby to mieszanie logiki z pamięcią masową. –

+0

Dobrze. Nie byłem protekcjonalny, po prostu wzmacniałem fakt, że nie są ze sobą połączeni. –

+0

Schemat mówi "tutaj są pola". Wymowny model mówi wtedy "użyj tych pól". Nic wspólnego ze sobą :) –

6

laravel ~ 4.1 ma metodę do osiągnięcia tego celu:

$table->morphs('itemable'); 

Tworzy:

itemable_id 
itemable_type 
table_name_itemable_id_itemable_type_index 

drugi opcjonalny parametr jest nazwą indeksu zastępczego, jeśli indeks jest zbyt długi. Podpis to:

public function morphs($name, $indexName = null); 
+0

Dzięki człowieku, projekt był dowodem koncepcji, a modele i relacje szalały, aby wdrożyć bez tego i zostały porysowane :( –

+0

Niestety, aby to usłyszeć, zawsze można wprowadzić polimorfizm Laravel właśnie przez określenie kolumny "something_type" i niepodpisanej (inkrementującej) kolumny "something_id". – andrewhl