2016-03-19 15 views
2

私はlaravel多相関係を使用しています。 2つの目的のために2つのmorphTo関係を定義しました。 私の質問はそれですが、Relation :: morphMap()関数の配列のキーを定義するときに、配列のキーが1つのケースで同じであるため、私が指定できる方法があるかどうかを知りたい特定のクラスの関係を定義する。関連クラス:: morphMap()を別のクラスに使用する方法

私の第1の関係....

Package.php

public function provider() 
{ 
    return $this->morphTo(null, 'map_type_id', 'map_id'); 
} 

Venue.php

public function packages() 
{ 
    return $this->morphMany(VendorPackage::class, 'map', 'map_type_id', 'map_id'); 
} 

Vendor.php

public function packages() 
{ 
    return $this->morphMany(VendorPackage::class, null, 'map_type_id', 'map_id'); 
} 

map_type_idと比較するキーを設定したいので、サービスプロバイダのキーを設定しています。

Relation::morphMap([ 
          config('evibe.roles.planner')  => \Vendor::class, 
          config('evibe.roles.artist')   => \Vendor::class, 
          config('evibe.roles.venue')   => \Venue::class, 
         ], false); 

私の第二morphTo関係

チケットBooking.php

public function provider() 
{ 
    return $this->morphTo(null, 'map_type_id', 'map_id'); 
} 

Venue.php

public function bookings() 
{ 
    return $this->morphMany(TicketBooking::class,null,'map_type_id','map_id'); 
} 

Decors.php

public function bookings() 
{ 
    return $this->morphMany(TicketBooking::class,null,'map_type_id','map_id '); 
} 

ここでも、デフォルトのモデル名を使用していないため、サービスプロバイダでmorphToを定義する必要があります。

サービスプロバイダの私のmorphToはこのようになりました。

Relation::morphMap([ 
          config('evibe.roles.planner')  => \Vendor::class, 
          config('evibe.roles.artist')   => \Vendor::class, 
          config('evibe.roles.venue')   => \Venue::class, 
          config('evibe.ticket_type.venues') => \Venue::class, 
          config('evibe.ticket_type.decors') => \Decor::class 
         ], false); 

今私の問題は、キーコンフィグ(「evibe.roles.planner」)設定( 'evibe.ticket_type.venues)はが同じ値3を持っているので、両方の事をしてアクセスされたときにということですそれでは配列が同じキーを持っているので、それはエラーを投げています。

私は、異なる関係のために異なるmorphMapを定義する他の方法があるかどうか尋ねたいと思います。

答えて

1

は、多型の関係に

Firts関係を定義することによって開始します....

Package.php

public function provider() { 
    return $this->morphTo(null, 'map_type_id', 'map_id'); 
} 

Venue.php

public function packages() { 
    // you should provide the relation name, in our exemple its called `provider` as a second parameter 
    return $this->morphMany(VendorPackage::class, 'provider', "venues"); 
} 

Vendor.php

public function packages() { 
    // you should provide the relation name, in our exemple its called `provider` as a second parameter 
    return $this->morphMany(VendorPackage::class, 'provider', "vendors"); 
} 

第2の関係

TicketBooking.php

public function provider() { 
    return $this->morphTo(null, 'map_type_id', 'map_id'); 
} 

Venue.php

public function bookings() { 
    return $this->morphMany(TicketBooking::class, 'provider', 'venues'); 
} 

Decors.php

public function bookings() { 
    return $this->morphMany(TicketBooking::class, 'provider', 'decors'); 
} 

としてレジスタ
関連する問題