[ Dica Zend Framework ] – Como pegar o último id {lastInsertId} de uma consulta

Então, mas uma pegadinha do malandro!

Normalmente, quando estamos criando Models customizamos até mesmo o nome dos métodos padrões da classe Zend_Db_Table_Abstract e acabamos nos deparando com resultados inesperados.

Um exemplo prático:

Supondo que voce criou um Model Produtos, as chances de você criar um método cadastrar, ou novo, ou inserir, são enormes, dai a queixa.


...
public function cadastrar( $dados )  {
    $this->insert( $dados );
}
...

Ai na hora de inserir os dados você deseja saber o último id inserido e não sai nada.

E você faz algo do tipo:


...
public function cadastrarAction()  {
    $db = new Produtos();
    $dados = array(
        'nome' => $this->getRequest()->getPost('nome'),
        'descricao' => $this->getRequest()->getPost('descricao'),
        'valor' => $this->getRequest()->getPost('valor')
    )
    $id = $db->cadastrar( $dados );
}
...

Ai o que acontece? Voce insere certinho, mas não retorna o id.

A dica esta tem duas partes:

1) Talvez voce tenha esquecido de colocar o return no Model para o método cadastrar


...
    return $this->insert( $dados );
...

2) Voce não colocou o ID na variável $dados. Vale ressaltar aqui, que o Zend manipula os tipos de dados bem estritamente, e certas operações não estarão disponíveis se você não for específico com o tipo de dado em uso, neste caso, o ID a ser retornado é do tipo NULL e logo, você tem que fazer isto:


...
    $dados = array(
        'id' => null // observe que é null e nao 'null' entre aspas, senao seria string
...