如何通过字符串名称在 yii2 中创建模型对象?

How to create a model object in yii2 by string name?

我需要通过字符串名称创建一个模型,它是一个变量。

       function($modelName){ 
               $modelName= "backend\models\".$modelName;

               $modelClass = Yii::createObject([
                          'class' => $modelName,
                    ]); 
                    $model =  $modelClass::find(); 
            }

当我将 Book(它是从数据库中提取的)作为模型名称传递给函数时,它会抛出一个错误:Class backend\models\Book does not exist。 但是当我写 $modelName= "backend\models\Book"; 它工作正常。

我知道是因为运行时间和编译时间。但我不知道如何解决。因为 $modelName 在 运行 时间被表征。

您正在使用对象访问静态方法。您应该只使用 class 名称访问静态方法,例如:

$modelName = 'backend\models\' . $modelName;
$model = $modelName::find(); 

请记住 $modelName::find() 不是 return 模型,而只是模型的查询对象。要获得模型,您应该使用例如:$modelName::find()->where(['id'=>$your_value])->one();