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?

Foi útil?

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top