#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
.