如何通过字符串名称在 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();
我需要通过字符串名称创建一个模型,它是一个变量。
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();