2011-06-28 2 views
4

モデルを保存する場合は、getLastInsertId()は最後の挿入IDを返しますか、今保存した行からIDを返しますか?言い換えれば、私はこれを行う場合:CakePHP:getLastInsertIdメソッドを安全にします

$this->Model->save($this->data); 
__thisFunctionTakesAVeryLongTimeToExecute(); 
$insertId = $this->Model->getLastInsertId(); 

は、私は2行以上保存したデータからIDを返すgetLastInsertId()い。または、それは作成された最新のIDを返しますか?

答えて

3

lastInsertIdについてはわかりませんが...代わりに$this->Model->idを使用しないでください。情報を保存した後、最後に挿入されたIDがそこに格納されます

+0

真剣に? Hehe私は、感謝を知りませんでした:) –

2

私はModel::getLastInsertID()を使用しています。 $this->Model->idは、保存直後に本質的に同じことをします。

ただし、$this->Model->idは書き込み可能(つまり、$this->Model->id = <some_number>)で、必ずしも挿入したばかりのレコードのIDを表すとは限りません。一方、Model::getLastInsertID()はそうです。

1

Model::getLastInsertIDは、現在の接続から最後に挿入されたIDを取得します。したがって、同じ接続から挿入していない間は安全です。

もう少し明確にするために、私はあなたがこのエラーをどのように誘発するかを考えなければならないと信じています。同じマシン上の2つの異なるブラウザは、異なる接続を使用します。私は別のタブで同じブラウザで何が起こるべきか分かりません。これまでに他の人が言っていたように、私は決してその問題を抱えません

最も安全な方法は、挿入されたIDを返すストア手順であるかもしれませんが、それはフレームワークの手法ではありません。

関連する問題