Obtenha o último ID de inserção
-
26-09-2019 - |
Pergunta
Olá, estou usando o CakePhp 1.3 e não consigo recuperar o último ID da linha inserida. Na verdade, estou usando $ this-> Model-> ID para recuperar o último ID inserido, mas não consigo obter o ID. Quando tentou verificar o que é o tipo de retorno, diz como bool (falso), o que significa que nada é retornado.
Aqui estou carregando um modelo diferente em um controlador diferente, então esse seria o problema? Mas mesmo que eu esteja carregando, não recebo nada !!
$this->loadModel('Contact');
$this->Contact->query("insert into contacts(tblContact_firstName,tblContact_lastName,tblContact_company,tblContact_department,tblContact_address,tblContact_country,tblContact_city,tblContact_state,tblContact_zipcode,tblContact_phone1,tblContact_email1) values('$sanitizedFormData[fname]','$sanitizedFormData[lname]','','$sanitizedFormData[company]','$sanitizedFormData[address]','$sanitizedFormData[country]','$sanitizedFormData[city]','$sanitizedFormData[state]','$sanitizedFormData[zip]','$sanitizedFormData[phone]','$sanitizedFormData[email]');");
$this->loadModel('Contact');
$contactId = $this->Contact->id;
E quando imprimi a matriz de contato $ this-> recursivamente, encontrei o valor da tecla "ID" vazia. Então isso explica por que eu estava recebendo um valor vazio.
Agora, dada a minha situação, como eu receberia o último ID inserido, específico para o contato do controlador?
Solução
Quando você usa query()
Você perde muito o fornecimento automágico. Usar save()
em vez de.
De fato, você nem precisa carregar contato neste caso. Você pode executar qualquer consulta do controlador atual com query()
até economizar em qualquer outra tabela.
Você também pode evitar usar loadModel()
Se o seu modelo atual estiver de alguma forma associado ao contato ($this->CurrentModel->AnotherOne->Contact->save(...)
).
Outras dicas
Eu acho que você só quer fazer:
$this->getLastInsertID();
http://book.cakephp.org/2.0/en/models/additional-methods-and-properties.html#model-getlastinsertId
Se for o MySQL, você pode usar "Selecione FROM CONTACTS LAST_INSERT_ID ()" Consulta para obter o último ID. ou apenas "selecione last_insert_id ()"
Para MSSQL, é "selecione @@ identidade".
Isso ignora qualquer solução no CakePHP, portanto, pode haver uma solução melhor.
Você pode ter last inserted record id
por
echo $this->ModelName->getLastInsertID();
Como alternativa, você pode usar:
echo $this->ModelName->getInsertID();
Esses métodos podem ser encontrados em bolo/libs/modelo/modelo.php na linha 2775
Observação: Esta função não funciona se você executar a consulta de inserção manualmente