挣扎在Laravel的变形关系中

6ojccjat  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(130)

在一个项目中,假设我们有客户,每个客户都可以有一个代金券。但是,对于不同的客户,代金券可能用于不同的事情-可能是酒店、汽车或航班。
我们有一个表的航班优惠券代码,一个表的酒店优惠券代码和一个表的汽车优惠券代码。
因此,当一个客户被分配到一张凭证时,我们会为他们分配下一个代码,表示他们要获得凭证的相关内容。但是,与其使用多个表(customer_car_voucher、customer_hotel_voucher等),我更愿意使用一个凭证表,该表反过来链接到相关的凭证类型。
我想做的就是进入$customer-〉voucher-〉code来获取相关的代码,不管是航班、酒店还是汽车,其他的voucher可能会在以后添加,你看,用于不同的事情。
我想我可以使用可变形关系来做到这一点--凭证变形为汽车、酒店和航班,因此在凭证表中有一个“voucherable_type”和一个“voucherable_id”。
能帮个忙吗,我是不是做错了

vptzau2j

vptzau2j1#

你做得对。给你个提示用途:

public function customer()
  {
    return $this->belongsTo(Customer::class):
  }

  public function voucherable()
  {
    return $this->morphTo();
  }

在凭证模型中。
每个航班、汽车、酒店包括:

public function voucher(){
    return $this->morphOne(Voucher::class,'voucherable');
}

您也可以查看Laravel morph relationship以获得更多帮助。

6yt4nkrj

6yt4nkrj2#

在Laravel的Eloquent中,ORM用于可变形关系。
首先,创建两个模型AirVoucherVoucher
首先,AirVoucher模型使用以下关系。

public function voucher()
{
    return $this->morphOne(Voucher::class, 'voucherable');
}

其次,Voucher模型使用以下关系。

public function voucherable()
{
   return $this->morphTo();
}

您可以使用以下Laravel官方关系文档获取更多帮助。
Laravel Morph Relationships.

zte4gxcn

zte4gxcn3#

必须使用laravel多态关系。
Voucher model中,将该模型设置为多晶型模型(function name = modelname+"able"):

public function voucherable() \Illuminate\Database\Eloquent\Relations\MorphTo
{
    return $this->morphTo();
}

则在Car model(或酒店/航班)集合关系(function name= polymorph name)中:
如果每辆车都有one代金券,请使用morphOne:

public function files(): \Illuminate\Database\Eloquent\Relations\MorphOne
{
    return $this->morphOne(Voucher::class, 'voucherable');
}

如果每辆车都有many代金券,则使用morphMany:

public function files(): \Illuminate\Database\Eloquent\Relations\MorphMany
{
    return $this->morphMany(Voucher::class, 'voucherable');
}

恢复关系

$car = Car::find(1);
$vocher = $car->voucher;

拉腊维尔文件公司

相关问题