Yii Framework Forum: Идентификатор вставленной записи - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Идентификатор вставленной записи Rate Topic: -----

#1 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 25 February 2010 - 12:43 AM

Всем привет!

Есть вот такой вот код
$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
hi.i.am.corpix
JID: corpix@jabber.ru
i.am on Twittter: http://twitter.com/iamcorpix
Блог: http://corpix.ru
0

#2 User is offline   TrojaNFlash 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 37
  • Joined: 04-September 09
  • Location:RUS

Posted 25 February 2010 - 03:24 AM

1. через актив рекорд получение PK:
$model->getPrimaryKey();

2. чтобы не создавалась новая запись, ее надо сначало получить, например:
$user = User::model()->findByPk(1);
$user->name = 'qwe';
$user->save(false);
или модели выставить флаг isNewRecord: $model->isNewRecord = false;
еще у актив рекорд есть методы update() и updateAll()
0

#3 User is offline   corpix 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 22-May 09
  • Location:Moscow

Posted 25 February 2010 - 07:40 AM

View PostTrojaNFlash, on 25 February 2010 - 03:24 AM, said:

1. через актив рекорд получение PK:
$model->getPrimaryKey();

2. чтобы не создавалась новая запись, ее надо сначало получить, например:
$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)) {
...

hi.i.am.corpix
JID: corpix@jabber.ru
i.am on Twittter: http://twitter.com/iamcorpix
Блог: http://corpix.ru
0

#4 User is offline   lisiy50 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-September 11

Posted 05 July 2013 - 07:29 AM

А как получить id записи если она была создана конструктором запросов, а не через ектив ркорд?
0

#5 User is offline   Mihail 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 29-June 13

Posted 05 July 2013 - 07:50 AM

Сотреть тут getLastInsertID
Быстро ссылки:
Yii - http://www.yiiframework.com/download/
Полное руководство по Yii - http://www.yiiframew...de/1.1/ru/index
Class Reference - http://www.yiiframework.com/doc/api/
Расширения - http://www.yiiframew...com/extensions/
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users