べにやまぶろぐ

技術寄りの話を書くつもり

FuelPHP の delete() が論理削除っぽい挙動をしてハマる

バージョン : FuelPHP 1.7

FuelPHP で CRUD - Orm Package - FuelPHP ドキュメント にあるような

$entry = Model_Article::find(4);
$entry->delete();

って感じのコードを書いていたんですが、対象のレコードは消える一方で新しいレコードが追加されるという奇妙な現象に悩むこと小一時間、たどり着いたのが下記の一文。

In the previous example the $entry variable and its object still exist. The primary keys are however set to null and the object itself is considered a new instance. If you save it after deletion it will be re-entered into the database and be given a new primary key when auto_increment is switched on.

つまりは delete() しても save() すると auto_increment によって振られた新しい PK によって不死鳥の如く再インサートされるというのです。確かにそんな感じの挙動はしているんですが特に消した後に save() を打っている箇所なんてないはず。親の cascade_save で道連れ save が起きてる説も疑ったんですが false にしても挙動変わらずで迷宮入り。

ちょっとソース読まないといけないなと思いつつとりあえず DB::query() で SQL 書いて hard_delete() 的なメソッドを加えることで対処してしまいました。これは要継続調査。