さまざまなモデル クラスに Containable Behavior を数回追加した後、単純に AppModel に行を追加して、すべてのモデルを Containable にすることにしました。それでは、特定のモデルが収容可能な動作を持つことが望ましくない、または逆効果である状況はありますか?
2 に答える
心配するのは少なすぎると思います。AppModelにcontainableを入れました:
class AppModel extends Model {
public $recursive = -1;
public $actsAs = array('Containable');
}
とにかく、Containableはrecursiveをオーバーライドするので、recursiveを-1に設定する必要はありませんが、わかりやすくするために設定します。常に封じ込め可能なものを使用すると、常に必要なものだけを使用するというベストプラクティスが必要になります。小さなアプリの場合、再帰を使用して包含可能を無視することは世界の終わりではありませんが、それでもベストプラクティスではありません。
したがって、包含可能ではなく再帰を使用するための唯一の議論は、小さなアプリでは、開発時間をわずかに節約でき、パフォーマンスにそれほど大きな影響を与えないということだと思います。私は間違いなくデフォルトでcontainableを使用し、その逆ではなく、やり過ぎだと思われる場所でそれを削除します。
Containable は危険な場合があります。b/c Cake は、ネストされた結果を取得するために非常に非効率的な方法で動作します。
こちらのサイトが分かりやすく説明...
http://www.endyourif.com/cakephp-containable-statement-pitfalls/
基本的に、返される素敵な配列はさまざまなクエリの結果ですが、最高のパフォーマンスは、結合を含む単一のクエリを使用することで得られる場合があります。
ただし、containable の便利さは否定できません。