2016-03-25 7 views
0

私はこれらの多形性の関係を一日中頭を下ろそうとしています。私はそれを複雑に思っていたかもしれない。 Laravelは逆多型関係を扱うことができますか?私は2つのタイプのフィールドModels- normal fieldとcustomFieldを持つことができる登録フローを持っています。逆多型関係をどうしたらいいですか?

利用可能なすべてのフィールドをループすると、NormalFieldまたはCustomFieldのいずれかから属性を取得できます。 *

<?php 
    foreach($registrationFlow->fields->get() as $field) 
    { 
     echo $field->name; // could be custom field or could be normal field 
    } 
?> 

私の難しさは、あなたがスタッフや受注のいずれかに写真を割り当てたい場合は、ドキュメント内the example givenが働く、ということですが、私はregistrationFlow

をしたCustomFieldやnormalFieldのいずれかを割り当てますあなたはexample for the polymorphic many to many relationship従っている場合

を編集し、タグクラスは、私は単純なフィールド()たCustomFieldまたはnormalFieldにタイプに依存関係の方法をしたいだろうがポストやビデオ - が含まれています

+0

私は違いを理解していません?私はあなたが「逆多型関係」を意味するのかどうかはわかりませんが、もっと明確になりますか? – ollieread

+0

あなたが正式な例に従えば、私は$ photos-> itemsのようなものがほしいと思う - 私はこの答えを書いて、それが私の頭の中ではっきりしていると思う。 –

+0

私はそれをより良く説明したと思う –

答えて

1

まず、Laravel 5.1の最新ドキュメントをご覧ください。https://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations

は、私は、彼らが提供する例との難しさは、あなたが「ある-」の関係をモデル化しようとしているのに対し、PhotoStaff/Productとの関係は、「持っている - 」の関係であるということであると思います。しかし、 "is-a"を本質的に同じ方法でモデル化することができます。この記事をご覧ください:http://richardbagshaw.co.uk/laravel-user-types-and-polymorphic-relationships/

基本的には、RegistrationFlowに関するFieldのような一般的なモデル(および一般的なテーブル)を定義することです。 NormalFieldCustomFieldという2つのサブタイプモデルがあり、それらはFieldと1対1の関係にあります。 (あなたの "is-a"があります)。したがって、RegistrationFlowは、フィールドサブタイプに関連して間接的にです。

class Field extends Model { 

    public function fieldable() 
    { 
     return $this->morphTo(); 
    } 
} 

あなたのベースfield表が定義されfieldable_idfieldable_type列を持つべきである(雄弁のドキュメントを参照してください):

多型を使用すると、特定のサブタイプにアクセスしたいときに来ます。

あなたは、あなたはベースモデル(あなたの「逆の関係」)をアクセスできることNormalFieldCustomFieldにメソッドを追加することができます

class NormalField { 

    public function field() 
    { 
     return $this->morphOne('Field', 'fieldable'); 
    } 
} 

class CustomField { 

    public function field() 
    { 
     return $this->morphOne('Field', 'fieldable'); 
    } 
} 

は使用方法:

$field = Field::find(1); 

// Gets the specific subtype 
$fieldable = $field->fieldable; 
関連する問題