如何对不同的类

时间:2016-03-19 10:07:38

标签: mysql database laravel laravel-5.2

我正在使用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。

1 个答案:

答案 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
]);