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

如何在yii2中按字符串名称创建模型对象?,yii2,runtime,yii2-model,Yii2,Runtime,Yii2 Model,我需要通过字符串名创建一个模型,它是一个变量 function($modelName){ $modelName= "backend\\models\\".$modelName; $modelClass = Yii::createObject([ 'class' => $modelName, ]);

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

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

               $modelClass = Yii::createObject([
                          'class' => $modelName,
                    ]); 
                    $model =  $modelClass::find(); 
            }
当我将
Book
(从DB中提取)作为modelName传递给函数时,它抛出一个错误:
Class backend\models\Book不存在
。 但是当我写
$modelName=“backend\\models\\Book”工作正常


我知道这是因为运行时和编译时。但我不知道怎么解决它。因为$modelName是在运行时进行特征化的。

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

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

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

为什么使用双斜杠?因为它在“”中。因此我们应该使用双斜杠。名称空间开头缺少尾随斜杠。我已经做了,但它抛出:
Class'backend\models\Book'notfound
on
$model=$modelName::find()行。您确定模型在后端,而不是公共的吗???,您是否尝试过在字符串开头添加斜杠。。。。也期待你的评论。。检查书名末尾是否没有空格我是说“Book”而不是“Book”。。当你选择表格DHBHHH时,试着把它修剪掉。谢谢你。这是因为书的结尾有空格。