我正在使用laravel多态关系。 我已经为两个目的定义了两个morphTo关系。 我的问题是,但是当我定义Relation :: morphMap()函数数组的键时,我的数组键对于一种情况是相同的,所以我想知道有什么方法我可以指定我定义特定班级的关系。
我的第一个关系....
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关系
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 ');
}
现在我必须在服务提供者中定义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。
答案 0 :(得分:1)
让我们从定义多态关系开始
Firts relationship ....
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");
}
第二关系
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');
}
并将Relation::morphMap
注册为
Relation::morphMap([
'vendors' => \Vendor::class,
'venues' => \Venue::class,
'decors' => \Decor::class
]);