corpix
(I Am Corpix)
February 25, 2010, 5:43am
1
Всем привет!
Есть вот такой вот код
$q = Yii::app ()->db->createCommand ( 'INSERT INTO '.$this->tableName().' (maintainers_name, usr_id) VALUES(:maintainers_name,:usr_id)' );
$q->bindParam ( ':maintainers_name', $this->maintainers_name, PDO::PARAM_STR );
$q->bindParam ( ':usr_id', $this->usr_id, PDO::PARAM_STR );
$q = $q->execute ();
Каким образом получить идентификатор вставленной записи?
Используется СУБД PostgresQL
Пробовал проделывать это с использованием Active Record(Куда проще и красивее, чем ручками)
Что обнаружил…при использовании метода save() скрипт почему-то пытается обновить имеющеюся запись(в мануалах о таком поведении ничего не сказано).
Из лога:
2010/02/25 08:41:49 [trace] [system.db.CDbCommand] Executing SQL: UPDATE "maintainers" SET "maintainers_name"=:yp0, "usr_id"=:yp1 WHERE "maintainers"."maintainers_id" IS NULL
Покопался, нашёл метод insert(), он выдал такую ошибку: "CDbException The active record cannot be inserted to database because it is not new."
Гугление ничего не дало.
Версия фреймворка 1.1.0
через актив рекорд получение PK:
$model->getPrimaryKey();
чтобы не создавалась новая запись, ее надо сначало получить, например:
$user = User::model()->findByPk(1);
$user->name = ‘qwe’;
$user->save(false);
или модели выставить флаг isNewRecord: $model->isNewRecord = false;
еще у актив рекорд есть методы update() и updateAll()
corpix
(I Am Corpix)
February 25, 2010, 12:40pm
3
TrojaNFlash:
через актив рекорд получение PK:
$model->getPrimaryKey();
чтобы не создавалась новая запись, ее надо сначало получить, например:
$user = User::model()->findByPk(1);
$user->name = ‘qwe’;
$user->save(false);
или модели выставить флаг isNewRecord: $model->isNewRecord = false;
еще у актив рекорд есть методы update() и updateAll()
Прошу прощения, видимо мы не так друг друга поняли…
Дело в том, что мне нужно добавить новую запись и получить её идентификатор
Вродебы разобрался, всё работает, спасибо
if ($this->validate()) {
$this->isNewRecord = true;
if ($this->save(false)) {
...
lisiy50
(Lisiy50)
July 5, 2013, 12:29pm
4
А как получить id записи если она была создана конструктором запросов, а не через ектив ркорд?
Сотреть тут getLastInsertID
corpix:
Прошу прощения, видимо мы не так друг друга поняли…
Дело в том, что мне нужно добавить новую запись и получить её идентификатор
Вродебы разобрался, всё работает, спасибо
if ($this->validate()) {
$this->isNewRecord = true;
if ($this->save(false)) {
...
Поделитесь пожалуйста - как Вы получаете ID вставленной записи?
П.С. Смотрю некоторые варианты - но мне кажется что в результате есть возможность получить не тот ID
После $this->save, id будет в $this->id