Zend Framework: как получить идентификатор последней вставленной строки?

Я вставляю новую строку в свою базу данных с помощью этого кода:

$data = array(
    'key' => 'value'
);
$this->getDbTable()->insert($data);

Как я могу получить идентификатор строки этой строки, которую я только что создал?


person Andrew    schedule 08.12.2009    source источник


Ответы (4)


Вы пробовали это? Это также отлично работает.

//just after you call your insert($data) function .. use this
$lastInsertId = $this->getAdapter()->lastInsertId();
person Amit Dugar    schedule 22.06.2011

Одна ошибка. При вызове $this->getDbTable()->insert($data); вы должны убедиться, что $data включает "первичный ключ" вашей таблицы. Например, id=null, если это автоинкремент. В противном случае insert() не вернет последний вставленный идентификатор.

person Cong    schedule 27.06.2010
comment
Спасибо, Конг. Это спасло меня. - person Andre; 19.03.2012
comment
Одно примечание: это уже помечено как исправленное в v1.11.6. См. framework.zend.com/issues/browse/ZF-3837. - person Marcin Orlowski; 05.08.2012

Попробуйте код ниже:

Чтобы вставить данные:

$this->tableGateway->insert($data);

Получить последнее вставленное значение:

$this->tableGateway->lastInsertValue;
person kwelsan    schedule 25.05.2013
comment
что, если другой пользователь вставил запись после, lastInsertValue получит последний вставленный идентификатор вообще или для определенной транзакции - если используется -? - person Katia; 23.05.2014

Существует также функция newId, которая возвращает следующий новый идентификатор, поэтому вы можете использовать ее для вставки новой строки.

$id = $this->getDbTable->newId('table_name', 'id');

$data = array(
    'id' => $id,
    'data' => $data
);

$this->getDbTable->insertRow('table_name', $data);

Теперь вы можете делать со своим $id все, что хотите.

person António Almeida    schedule 13.01.2014