2013-01-11 10 views
5

Ich möchte einige kommentierbare Modelle für ein Projekt erstellen, aber ich kann keine Referenzen finden, um die Kommentare Migrationsskript zu erstellen, ich habe nur dieses Video auf vimeo gefunden: Laravel 4 - Eloquent Collections & Polymorphic Relations.Kann Laravel Schema polymorphe Assoziationen aus der Box verwalten?

Soll ich die polymorphen Spalten explizit hinzufügen?

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

Frage kommt als Erbauer tun erwartet, dass der Programmierer, wenn ein Schlüssel ist ein Fremdschlüssel wie in $table->foreign('user_id')->references('id')->on('users');

Antwort

0

polymorphe Verbindungen sind nichts mit Schema zu tun, sie ein beredtes Merkmal sind die Beziehungen ermöglicht gebaut werden zwischen jeder anderen Art von Modell.

Sie können Sie in der Dokumentation für diese:

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

+2

Ich verstehe Schema und Eloquent sind unterschiedliche Konzepte. Ich habe mich gefragt, ob es eine Verknüpfung zum Hinzufügen der polymorphen Spalten gibt, genau wie '$ table-> timestamps()'. Ich denke, das würde bedeuten, Logik mit Speicher zu mischen. –

+0

Rechts. Ich war nicht herablassend, ich verstärkte nur die Tatsache, dass sie nicht miteinander verbunden sind. –

+0

Schema sagt "Hier sind die Felder". Das eloquente Modell sagt dann "nutze diese Felder". Nichts miteinander zu tun :) –

6

Laravel ~ 4.1 verfügt über eine Methode, dies zu erreichen:

$table->morphs('itemable'); 

Erstellt:

itemable_id 
itemable_type 
table_name_itemable_id_itemable_type_index 

zweite optionale Parameter ist ein Ersatzindexname, wenn der Index zu lang ist. Die Signatur lautet:

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

Danke Mann, das Projekt war ein Beweis für das Konzept und die Modelle und Beziehungen waren verrückt zu implementieren, ohne dies und wurde zerkratzt :( –

+0

Sorry das zu hören. Sie können Polymorphismus in Laravel nur durch Angabe einer String-Spalte "something_type" und einer vorzeichenlosen (inkrementierenden) Integer-Spalte "something_id". – andrewhl