Laravel Polimorphic Relation Pass动态类型

时间:2015-07-06 16:01:36

标签: php laravel laravel-5

我在laravel中使用了polimorphic关系,但我的问题是,如何动态传递relation_type(例如:当我想为组织传递组织模型命名空间或联系传递联系模型命名空间创建票证时)。

这是我的模特

班级门票

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

班级组织

public function tickets(){
   return $this->morphMany('Ticket','relation');
}

课程联系

public function tickets(){
   return $this->morphMany('Ticket','relation');
}

我现在不可能,但我想要一个接受两个参数的函数

public function ticketRelation($model, $Id){
     $modelNamespace = $model::findById($id); 
     $ticket = new Ticket();
     $ticket->save();
     $modelNamespace->tickets()->save($ticket);    
}

在这个casse中,$ model param应该接受Organization或Contact来关联新票证 如果我意识到这一点,我只需要一条接受模型的路由和一个关联新票的Id。如何在这种方法中传递类似param的类?

1 个答案:

答案 0 :(得分:0)

将故障单链接到组织或联系人所需要做的就是:

$organization = new Organization;
$organization->save();

$contact = new Contact();
$contact->save();

$organizationTicket = new Ticket;
$organizationTicket->relation()->associate($organization);
$organizationTicket->save();

$contactTicket = new Ticket;
$contactTicket ->relation()->associate($contact);
$contactTicket ->save();

是的,可以通过您的功能实现您想要的效果。

从PHP 5.3开始,可以在包含类名的变量上动态调用类静态方法,因此如果$ model包含有效的命名空间类名,您可以这样做:

public function ticketRelation($class, $id){
     $model= $class::findOrFail($id); 
     $ticket = new Ticket();
     $ticket->relation()->associate($model);
     $ticket->save();
}