Laravel:设置字符串作为模型的名称


Laravel: Set string as name for model

我正在使用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);