0
0

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 1 year has passed since last update.

filterFindで制御しているwhere句を一時的に取り消す

Last updated at Posted at 2022-03-29

ふと仕事で「src/Model/Table/HogesTable.phpで設定している設定をコントローラー側で止められないかな」と思い立ちました。
ほとんどの場合は論理削除されているデータは表示させる必要はないので、filterFindでdeletedが0のものしか取得しないようにしていますが、たまに削除済みのデータも必要になる場合があります。

cakephp2の記事はたくさん出てきたのですが、3と4の記事は出てこなかったのでこちらに書き残しておきます。

やりたいこと

$this->Hoges->find('all')->toArray();

と書いても自動で論理削除されているレコードが取得出来ないように設定されているので
一時的にコントローラーで論理削除されているデータも取得できるようにしたい

やったこと

src/Model/Table/HogesTable.php

class HogesTable extends Table
{
    ...
    public function beforeFind(Event $event, $query, $options)
    {
        if(isset($options['getDeleteRecords']) && $options['getDeleteRecords'] === true){
            //何もしない
        }else{
            $query->where([$this->aliasField('deleted') => 0]);
        }
    }
}

src/Controller/HogesController.php

$hoges = $this->Hoges->find('all', ['getDeleteRecords' => true])->toArray();

※getDeleteRecordsという名称は便宜上こう書いただけなので、何でも構いません。

簡単でしたね!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?