как получить значение первичного ключа модели после сохранения

#yii2 #yii2-advanced-app

#yii2 #yii2-advanced-app

Вопрос:

у меня проблема, когда я пытаюсь получить первичный ключ (автоматическое увеличение) из базы данных после сохранения модели.

В базе данных у таблицы нет первичного ключа, поэтому я установил его, используя это:

 public static function primaryKey(){
    return ['id_cod'];
}
  

И я удалил его из правил моделей.

Когда я сохраняю модель, все данные сохраняются в включенной базе id_cod данных, но если я пытаюсь получить доступ к этому свойству, оно выдает мне null.

 $evento = new Evento();
//populate the model with some data
//..... eg: $evento->name = 'name';
//save model
$evento->save();
$evento->refresh();

echo Yii::$app->db->getLastInsertID(); // gives me the correct id_cod but i think it's not the correct way
echo $evento->id_cod;//gives me null
echo $evento->name;//gives me name 
  

Как я могу получить id_cod сразу после сохранения модели?

Комментарии:

1. Новое Model ? Это должен быть экземпляр ActiveRecord . Или это один, вы только что назвали его Model?

2. я назову это Model, например, это значение ActiveRecord. Я обновлю вопрос с другим именем

3. Как id_cod генерируется в базе данных? save Метод вернулся true ?

4. id_cod является автоинкрементом, и он создается ( getLastInsertID() дает мне правильный id_cod). Метод Save возвращает true (и модель проверяется).

5. Похоже ActiveRecord::insertInternal , устанавливает значения первичного ключа на основе результата, возвращаемого Schema::insert() . Этот метод ищет первичный ключ в схеме таблицы, а не в primaryKey() методе модели. Так getLastInsertID() что, вероятно, остался единственный способ получить этот идентификатор. Но, возможно, было бы лучше использовать $evento->getDb() вместо Yii::$app->db .