当模型名称存储在变量中时,有没有办法通过变量动态访问laravel模型?

时间:2018-06-14 09:59:40

标签: php laravel

基本上我需要做的是:

$x = 'Admin';
$model = new \ReflectionClass($x);
$model->getFieldList();

我在app文件夹中有Admin模型。 显然,这不起作用。有谁有想法吗?可以吗?

3 个答案:

答案 0 :(得分:5)

首先,您需要将名称空间添加到模型中。默认情况下,这是App\。所以你的字符串必须是"\App\Admin"。现在,您只需使用此字符串创建一个类实例。

$x = '\\App\\Admin';
$model = new $x();

答案 1 :(得分:2)

您可以这样做,但您需要使用完全限定的类名。例如,我的模型位于ScriptErrorsSuppressed目录中:

Model

答案 2 :(得分:0)

我在控制器构造函数中使用类似的东西。这是我用的:

1)首先在父控制器中声明一个变量,说: $ route_model_name和$ model_location。

  1. 然后将其添加到每个子控制器:

    function __construct() {
      parent::__construct();
      $this->setRouteModelName( 'model_route_name' );
      $this->setModelLocation( 'App\Models\ModelName' );
    }
    
  2. 然后在父控制器中添加一个方法以初始化模型类,以准备进行查询:

     /**
      * @return mixed
      */
     protected function getModelClass() {
         return app( $this->model_class );
     }
    
  3. 然后,您可以在每个子控制器中更改模型位置和路线,并仍在父控制器中使用相同的方法:

     public function edit( $id ) {
         return $this->getModelClass()::where( 'id', $id )->first();
     }