ふと仕事で「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という名称は便宜上こう書いただけなので、何でも構いません。
簡単でしたね!