2017-12-28 20 views
1

Ich habe eine polymorphe BeziehungLaravel polymorphe Beziehung assign Modell

codes (code, soure_id, source_type) 

Quellen:

websites (id, url) 

books (id, isbn) 

Ich habe die notwendigen Beziehungen (morphTo, morphMany) in den Modellen codiert.

Wie kann ich zuordnen Quelle zu einem Code:

$source = Book::first(); 

    $code = new Code() 
    $code->code = 'huxawex123ad' 
    $code->source ... // How can I assign the book as the source? 
    $code->save(); 

Beziehungen:

class Code extends Eloquent { 
    public function source() 
    { 
     return $this->morphTo(); 
    } 
}; 

class Book extends Eloquent { 
    public function codes() 
    { 
     return $this->morphMany(Code::class, 'source'); 
    } 
}; 

Antwort

1

ich die richtigen Felder gesetzt für polymorphe Beziehungen

Fügen Sie diese Felder Codes Tabelle nicht sehen:

sourceable_id - integer 
sourceable_type - string 

Beziehungen wäre wie:

class website extends Model 
{ 
    /** 
    * Get all of the website's codes. 
    */ 
    public function codes() 
    { 
    return $this->morphMany('App\Code', 'sourceable'); 
    } 
} 

Dann in Ihrem Controller:

$source = Book::first(); 

$code = new Code() 
$code->code = 'huxawex123ad' 
$code->source ... // How can I assign the book as the source? 
$code->save(); 

$source->codes()->save($code); 
+0

Das ist, was ich habe. Ich vermisse die Zeile: $ code-> source ... // Wie kann ich das Buch als Quelle zuordnen? – Chris

1

MorphTo Beziehungen ähnlich sind BelongsTo Beziehungen. So hat Ihr Code Modell unter der Annahme einer source() Methode Setup eine morphTo() Beziehung zurückzukehren, würde Ihr Code wie folgt aussehen:

$source = Book::first(); 

$code = new Code() 
$code->code = 'huxawex123ad' 
$code->source()->associate($source); 
$code->save(); 

Zusätzlich vorausgesetzt, Ihr Book Modell eine codes() Methode Setup hatte eine morphMany() Beziehung zurückzukehren, Ihr Code könnte bereinigen wie folgt:

$source = Book::first(); 

$source->codes()->create(['code' => 'huxawex123ad']); 
+0

Das Problem ist, dass die Codezeile bereits existiert. Ich muss die Beziehung hinzufügen, anstatt einen neuen Codeeintrag zu erstellen. – Chris

+0

Und Associate schlägt fehl mit: Class 'voluptates' nicht gefunden ... Obwohl die Klasse App \ Models \ Book sein sollte – Chris

Verwandte Themen