データベーステーブルのいくつかに、CakePHP モデルが取得する必要のないフィールドがいくつかあります。モデル レベルで取得するデフォルトのフィールド セットを設定する方法はありますか? たとえば、テーブルごとに 50 のフィールドを持つサードパーティが設計したデータベースからデータを取得し、5 を使用します。
find() クエリ時およびモデル間の関連付け時にフィールドに制限を設定できることは知っていますが、モデルレベルのアプローチがあるかどうか疑問に思っていました。
データベーステーブルのいくつかに、CakePHP モデルが取得する必要のないフィールドがいくつかあります。モデル レベルで取得するデフォルトのフィールド セットを設定する方法はありますか? たとえば、テーブルごとに 50 のフィールドを持つサードパーティが設計したデータベースからデータを取得し、5 を使用します。
find() クエリ時およびモデル間の関連付け時にフィールドに制限を設定できることは知っていますが、モデルレベルのアプローチがあるかどうか疑問に思っていました。
CakePHP は、そのままでは Model レベルで記述したものを提供しません。つまりdefaultFields
、すべてのモデルで使用されるModel プロパティはありません。find()
ご指摘のとおり、プロパティを設定することにより、関連付けレベルでこれを指定できますfields
。ただし、これは、これらのリレーションシップのいずれかでモデルを取得する場合にのみ機能します。
最後に、これを に設定しますfind()
。次のようにモデルにプロパティを追加することで、繰り返しを最小限に抑えることができます。
var $defaultFields = array('Model.field1', 'Model.field2', ...);
次に、あなたのfind()
:
$this->Model->find('fields' => $this->Model->defaultFields, ...);
これには明らかな制限がありますが、少なくともある程度のカプセル化と柔軟性を提供します。
注:より侵襲的なアプローチでは、 を使用できますbeforeFind();
。その場合、すべてを調整する必要はありませんfind()
。ただし、走行距離は使用状況によって異なる場合があります。