Как создать объект модели в yii2 по имени строки? - PullRequest
0 голосов
/ 15 декабря 2018

Мне нужно создать модель по строковому имени, чтобы она была переменной.

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

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

когда я передаю Book (это извлечено из БД) в качестве modelName для функции, она выдает ошибку:Class backend\models\Book does not exist.но когда я пишу $modelName= "backend\\models\\Book";, он работает нормально.

Я знаю, что это из-за времени выполнения и времени компиляции.но я не знаю, как это решить.потому что $ modelName характеризуется во время выполнения.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы получаете доступ к статическому методу, используя объект.Вы должны получить доступ к статическому методу, просто используя имя класса, например:

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

И помните, что $modelName::find() не возвращает модель, а только объект запроса для модели.Для получения модели вы должны использовать, например: $modelName::find()->where(['id'=>$your_value])->one();

...