やりたいこと
現在、Cakephp3.6を利用しており、DBのアクセスにクエリビルダを利用しております。
各テーブルには「delete_flag
」という論理削除用のカラムを用意しており、
beforeFind
メソッドで以下のように、自動で論理削除されていないデータをとってくるようにしております。
php
1public function beforeFind(Event $event ,Query $query, $options, $primary) 2 { 3 // 指定がなければ必ず有効な情報をとってくる 4 $query->where(['delete_flag' => Entity::FLAG_ACTIVE]); 5 6 // クエリを返す 7 return $query; 8 }
しかし、他のテーブルをjoin
した場合、当然ながら「どのカラムのdelete_flagを言っているのかわからない」という以下のエラーが発生します。
Integrity constraint violation: xxxx Column 'delete_flag' in where clause is ambiguous
これを回避したいと思っています。
やったこと
1パターンしか思いつきませんでした。
以下のように、where区のカラム設定部分にテーブル名を明示することです。
public function beforeFind(Event $event ,Query $query, $options, $primary) { // 指定がなければ必ず有効な情報をとってくる $query->where(['テーブル名.delete_flag' => Entity::FLAG_ACTIVE]); // クエリを返す return $query; }
しかし、この方法だと、「カラムが見つかりません」と出ます。
Column not found: 1054 Unknown column 'テーブル名.delete_flag' in 'where clause'
こちらを回避する方法はあるのでしょうか?
ご存知の方がいらっしゃいましたら、ご教示頂けますと幸いです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/07 00:46