2017-12-28 53 views
1

Iはlaravel多型の関係がモデル

codes (code, soure_id, source_type) 

源多型の関係を持っているを割り当てます。私はのが多型の関係

コード表に、これらのフィールドを追加するために設定し、適切なフィールドを参照してくださいいけない

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

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

答えて

1

$source = Book::first(); 

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

関係:

は、どのように私はコードにソースを割り当てることができます。

sourceable_id - integer 
sourceable_type - string 
お使いのコントローラに続いて

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

関係は次のようになります

$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

これは私のものです。 $ code-> source ... //その本をソースとしてどのように割り当てることができますか? – Chris

1

MorphTo関係はBelongsToの関係に似ています。あなたのコードは、あなたのBookモデルがmorphMany()関係を返すためにcodes()方法のセットアップを持っていたと仮定すると、さらに

$source = Book::first(); 

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

:だから、あなたのCodeモデルがmorphTo()関係を返すためにsource()方法の設定を持っていると仮定すると、あなたのコードは次のようになります。クリーンアップのように:

$source = Book::first(); 

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

問題は、コード行がすでに存在していることです。新しいコードエントリを作成する代わりに、関係を追加する必要があります。 – Chris

+0

そして関連は失敗します:クラス 'voluptates'が見つかりません...クラスがApp \ Models \ Bookである必要があります – Chris