2016-03-19 9 views
2

Ich benutze Laravel polymorphe Beziehung. Ich habe zwei MorphTo-Beziehungen für zwei Zwecke definiert. Meine Frage ist das, aber wenn ich den Schlüssel des relation :: morphMap() -Funktionsarrays definiere, dann ist mein Array-Schlüssel für einen Fall gleich, also möchte ich wissen, ob es irgendeinen Weg gibt, mit dem ich angeben kann, dass ich bin Definieren der Beziehung für eine bestimmte Klasse.Wie verwendet man Relation :: MorphMap() für verschiedene Klassen

Meine erste Beziehung ....

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'); 
} 

Ich möchte den Schlüssel zum Vergleich mit map_type_id setzen, damit ich den Schlüssel in Service Provider einstelle.

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

Mein 2. morphTo Beziehung

Ticket 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 '); 
} 

Jetzt muss ich wieder das MorphTo im Dienstanbieter definieren, weil ich nicht den Standard-Modellnamen verwende.

so meine morphTo in Service Provider wurde so.

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); 

Nun mein Problem ist, dass die Schlüssel config ('evibe.roles.planner') und config ('evibe.ticket_type.venues) hat den gleichen Wert 3, wenn so beide Dinge zugegriffen wird die Beziehung dann wirft es Fehler, weil Array denselben Schlüssel haben.

Also ich möchte fragen, gibt es eine andere Möglichkeit, verschiedene MorphMap für unterschiedliche Beziehung zu definieren.

Antwort

1

Ermöglicht durch die Definition der polymorphen Beziehungen

Firts Beziehung zu beginnen ....

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"); 
} 

zweite Beziehung

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'); 
} 

und Register Relation::morphMap als

Relation::morphMap([ 
    'vendors' => \Vendor::class, 
    'venues' => \Venue::class, 
    'decors' => \Decor::class 
]); 
Verwandte Themen