Php Laravel多形关系动态传递类型

Php Laravel多形关系动态传递类型,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在laravel中使用了polipmorphic关系,但我的问题是,如何动态传递关系类型(例如:当我想要为组织传递组织模型命名空间或联系人传递联系人模型命名空间创建票证时) 这是我的模型 舱位票 public function relation(){ return $this->morphTo(); } public function tickets(){ return $this->morphMany('Ticket','relation'); } 班级组织 pub

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

这是我的模型

舱位票

public function relation(){
  return $this->morphTo();
}
public function tickets(){
   return $this->morphMany('Ticket','relation');
}
班级组织

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

public function relation(){
  return $this->morphTo();
}
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);    
}
在这种情况下,$model参数应为accept Organization或Contact以关联新票证
如果我意识到这一点,我只需要一个接受模型和Id的路由来关联新的票证。在这个方法中如何传递类似param的类

要将票证链接到组织或联系人,只需执行以下操作:

$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();
}

要将票证链接到组织或联系人,只需执行以下操作:

$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();
}

谢谢@jedrzej.kurylo我找到了解决方案。谢谢@jedrzej.kurylo我找到了解决方案。