質問
こんにちは、私は、CakePHP 1.3を使用していると私は最後に挿入行のIDを盗んすることができません。私は実際に最後に挿入されたIDを盗んします$ this->モデル - > IDを使用していますが、私はIDを取得することができません。戻り値の型であるかどうか確認しようとしたとき、それは何も返されないことを意味する、ブール値(偽)と述べています。
ここで私は別のコントローラで異なるモデルをロードしていますので、それは問題になるでしょう?しかし、私はロード午前にもかかわらず、私は戻って何を取得!!
$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;
私は再帰ます$ this->お問い合わせ配列を印刷したときにそして、私は、キーの空の「ID」の値を発見しました。それは私が空の値を受けた理由を説明するようにします。
今の私の状況を考えると、私は最後に挿入IDを取得する方法を、コントローラの連絡先に固有の?
解決
あなたはquery()
を使用する場合は、あなたが失うオートマジックCakePHPのがたくさん用意されています。使用して、代わりにsave()
。
実際には、あなたは、この場合であっても連絡先をロードする必要はありません。あなたはquery()
も、他のテーブルに保存すると、現在のコントローラから任意のクエリを実行することができます。
あなたの現在のモデルは、何らかの形で接触(loadModel()
)に関連付けられている場合は、$this->CurrentModel->AnotherOne->Contact->save(...)
を使用してもを避けることができます。
他のヒント
私はあなただけでやりたいと考えます:
$this->getLastInsertID();
ます。http://ブック.cakephp.org / 2.0 / EN /モデル/付加方法アンドproperties.html#モデル-getlastinsertid の
これはMySQLのある場合は、最後のIDを取得するには、クエリ「連絡先からLAST_INSERT_ID()を選択」使用することができます。 あるいは単に "SELECT LAST_INSERT_ID()"
MSSQLの場合、それは "@@ IDENTITYを選択" です。
ので、よりよい解決策があるかもしれませんが、これは、CakePHPのいずれかのソリューションをバイパスします。
は、
によりlast inserted record id
を得ることができます
echo $this->ModelName->getLastInsertID();
別の方法としては、あなたが使用することができます:
echo $this->ModelName->getInsertID();
この方法は、ライン2775上のケーキ/ LIBS /モデル/ model.php
に見出すことができます注:この機能しないの仕事、あなたが実行した場合、挿入クエリを手動