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

时间:2018-12-15 07:51:22

标签: yii2 runtime yii2-model

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

Book

当我将Class backend\models\Book does not exist(从DB中提取)作为modelName传递给函数时,它将引发错误:$modelName= "backend\\models\\Book";。 但是当我写 public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName(); @Override public void onTokenRefresh() { super.onTokenRefresh(); String refreshedToken = FirebaseInstanceId.getInstance().getToken(); } } 时效果很好。

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

1 个答案:

答案 0 :(得分:2)

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

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

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