質問

こんにちは、私は、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

に見出すことができます

注:この機能しないの仕事、あなたが実行した場合、挿入クエリを手動

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top