2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cakephp 2 primaryKeyをオリジナルにした場合のmodel->deleteの動作について

Posted at

cakePHPで、
primary keyを original_idとしている場合、

deleteで失敗します。

なので、ModelでprimaryKeyを指定すればいいんだろって思うけれどもところがどっこい。

modelにおいて、
public $primaryKey = "original_id"
とすればよいと、どこを見ても書いてあるのですが、
実際には、

public $displayField = "original_id"
これも書かないといけません。

なぜかって、cakePHPがdeleteの前に、fetchAllをしていたからでした。
そこでdisplayFieldの値が欲しいわけです。
もちろんうまくいくケースがあります。
それはマニュアルにある通り、displayFieldを指定しない場合はデフォルトとして、[id]を参照するからです。さらに[id]が無い場合は、[name]と[title]も見に行くみたいです。それらもなければ、エラーです。残念ながら。

cakePHPは便利な分、デフォルトで設定されているところがあるので、困ったもんですね。

ちなみに、Stack Overflowでも投稿がありますが、最終的には「doesn't work」で、deleteAllにすれば?ってことになってます。もちろん、displayField指定しないでdeleteAllで解決できますが気持ち悪いですよね。

こっちでもうすこし詳しく書こうかと思ってます。まずはメモ程度に。(-_-;)http://staff.qualias.jp

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?