2012-01-20 19 views
0

私は非常に直感的なものを探しています。CakePHP beforeFind条件

データを持つモデルがいくつかあり、各レコードにはstatusフィールドがあります。私は両方とも「1」の状態とし、「0」が、フロントエンドのすべてのレコードを表示する必要がある管理者のであれば、私はstatus = 1

また

モデルの一部でのみデータがありますいくつかのグローバルbeforeFindを設定する必要がありますhasManyなどbelongsToので、このデータはまた、あなたが条件に'status' => 1を追加し、モデルのbeforeFindコールバックでルールを追加することで簡単に行うことができstatus = 1

+0

いくつかのコードは私たちを助けます...レコードを表示するために使用するクエリは何ですか?あなたはその状態を与えようとしましたか? – Rikesh

+0

コントローラの中にはシンプルな 'find'や' paginate'を使うものがあります。もちろん、 'find'や' paginate'に条件を設定した場合、必要な結果が得られますが、 'hasMany'モデルの場合は、ステータス= 0の場合でも取得します。 – user1018809

答えて

1

とのデータのみを表示するようにフロントエンドのためにフィルタリングする必要があり、ない限り、 'status'はすでにに設定されています。したがって、いつでも条件を上書きできますが、デフォルトは1になります。

魔法のコールバックの動作に頼るのではなく、明示的にする必要があります。最適な方法は、条件配列に条件を追加する​​のようなモデルでメソッドを作成することです。 status = 1アイテムのみを表示するすべてのコントローラーメソッドで、このメソッドを明示的に呼び出します。管理インターフェイスでは、通常のfindメソッドを使用して、何でもしてください。

+0

管理者ですか? – user1018809

+0

技術的には答えは「はい」ですが、これは本当に間違った方法です。モデルは気にしないでください。世話をするのはモデルの仕事ではありません。モデルはちょうどデータを取得し、取得するデータを決定するのはコントローラの仕事です。したがって、適切なデータを簡単に取得できるように、モデル内の特定のメソッドを準備することはできますが、モデルが返すデータを決めることはできません。 – deceze

+0

現在のモデルデータは正常に動作しますが、これは 'hasMany'をフィルタリングしません。また、コントローラの中で'conditions' => 'status'をグローバルに設定する方法(befereFilter?など)では、管理者 – user1018809