我正在使用Laravel 5.2中的多态。我想要设置模型字符串的名称。代码:
switch ($passport->element_type) {
case 'Window':
$windows = Window::find($passport->element_id);
break;
case 'Floor':
$floor = Floor::find($passport->element_id);
break;
case 'Wall':
$wall = Wall::find($passport->element_id);
default:
break;
}
};
您可以看到变量"$passport->element_type"为我提供了模型的名称。我不想用开关箱来做。是否可以这样做:
护照-> element_type:找到(护照-> element_id);
或者我如何使用变量(element_type)作为模型的名称?
您需要设置适当的模型关系:
class Passport extends Model
{
/**
* Get all of the owning likeable models.
*/
public function pasportable()
{
return $this->morphTo();
}
}
class Window extends Model
{
public function pasport()
{
return $this->morphOne('App'Pasport', 'pasportable');
}
}
class Floor extends Model
{
public function pasport()
{
return $this->morphOne('App'Floor', 'pasportable');
}
}
class Wall extends Model
{
public function pasport()
{
return $this->morphOne('App'Wall', 'pasportable');
}
}
,接下来你可以通过
来访问变形对象:$passport->element();
// or
护照:找到($ id)——>元素();
,它应该返回地板,墙壁或窗口的模型取决于element_type
你试过吗?
如果$passport->element_type::find($passport->element_id);
不工作,我知道
$type = new $passport->element_type;
$type::find($passport->element_id);
。
谢谢大家的帮助。最后工作了,但是我需要添加path:
$type = App::make('''App'''.$passport->element_type);