如何将 Relation::morphMap() 用于不同的类

Posted

技术标签:

【中文标题】如何将 Relation::morphMap() 用于不同的类【英文标题】:How to use Relation::morphMap() for diffrent class 【发布时间】:2016-07-06 03:37:19 【问题描述】:

我正在使用 laravel 多态关系。 我为两个目的定义了两个 morphTo 关系。 我的问题是,但是当我定义 Relation::morphMap() 函数数组的键时,我的数组键在一种情况下是相同的,所以我想知道有什么方法可以指定我正在定义特定类的关系。

我的第一个关系....

包.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');

我想设置密钥以与 ma​​p_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');

装饰.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);

现在我的问题是键 config('evibe.roles.planner')config('evibe.ticket_type.venues) 具有相同的值 3,所以当两个东西都被关系访问时,它会抛出错误,因为数组有相同的键。

所以我想问有没有其他方法可以为不同的关系定义不同的morphMap。

【问题讨论】:

【参考方案1】:

让我们从定义多态关系开始

第一个关系....

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

【讨论】:

以上是关于如何将 Relation::morphMap() 用于不同的类的主要内容,如果未能解决你的问题,请参考以下文章

如何将CString转换成wstring

如何将Ios文件上传到

Qt如何将文字变成图片?

如何将Bitmap保存为本地图片文件?

在MATLAB中如何将图导出

ASP如何将SQLSERVER数据导出到DBF(VF)