如何在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时,试着把它修剪掉。谢谢你。这是因为书的结尾有空格。