2017-12-19 1 views
0

私は3つのエンティティがありますは、カスタムの多対多の関係

  • 機関を
  • 支店
  • 住所

機関&支店作成しないためになるよう、多くのアドレスを持っています各エンティティのアドレスを格納するための2つの子モデル、これらの列を主キーとして持つピボット・テーブルentity_id、address_id、entity_nameを作成します。このアプローチでは、機関と支店のすべての住所の関係を保存します。

これはentities_addressesピボットテーブルに

Schema::create('entities_addresses', function (Blueprint $table) { 
     $table->integer('entity_id')->unsigned(); 
     $table->integer('address_id')->unsigned(); 
     $table->string('model_name', 50); 
     $table->primary(['entity_id','address_id','model_name']); 

次に、アドレスモデルで、私は次のコードを持っている私のコードです:、

public function institutions() 
    { 
     return $this->belongsToMany(Institution::class, 'entities_addresses', 'entity_id', 'address_id'); 
    } 

次の機関モデルに、私は次のコード

を持っています
public function buildings() 

    { 
     return $this->hasMany(Building::class); 
    } 

私は「カスタム」関係である他の場所を追加する必要があると信じています今、私はこのエラーが供給しています:SQLSTATE [42S22]:見つからないカラム:1054不明な列「addresses.institution_id」

だから、私の質問は以下のとおりです。私は、カスタムの関係を指定しなければならないの

  1. 中間生成モデルを作成する方が良い方法ですか?
  2. 私はアタッチメソッドとデタッチメソッドの使用をカスタマイズする必要がありますか?私はそれをやるつもりですか?

よろしく

+0

Eloquentには既に多態性の関係があります。 https://laravel.com/docs/5.5/eloquent-relationships#polymorphic-relations – Devon

+0

おかげさまで@devonが解決策になることは間違いありません。レガルダ –

答えて

0

@Devonアプローチmhy質問、感謝の男のための適切なソリューションです!