我有一个相当简单的数据模型,但我有一个名为“item”的中心实体,它通过1对1/1对多关系与7个其他实体相关联。 一切顺利。但是在大多数与项目模型一起使用的操作中,我不需要项目模型中的任何关联 - 因此mysql最终会发出许多不必要的查询(因为“item”模型类中定义了关联)。
我正在考虑什么是最小化这些不必要的查询的最佳方法 - 我正在考虑从Model类中删除所有关联,使所有模型包含在内,并在运行时根据需要创建关联。
另一种选择是只在有意义的地方使用bindModel / unbindModel。
我不确定哪种方法更好,如果有另一种更合适的方法来最小化那些不必要的mysql查询。
任何反馈都会很棒:)
答案 0 :(得分:1)
在发出find()之前,将递归属性设置为0:
$this->Model->recursive = 0;
答案 1 :(得分:1)
不要使用递归。 不要删除你的关联。
在app_model.php中添加(在班级):
var $actsAs = array('Containable');
然后使用
$this->MyModel->contain();
或
$this->MyModel->contain(array('AssocThing.field','OtherThing.SubThng.field'));
控制您检索的表格和字段。
Containable可以对您检索的数据进行细粒度控制。这就是它的用途!
答案 2 :(得分:0)
我会首先使用unbindModel()。然后我只在那些只使用unbindModel()的控制器或模型中使用Containable behavior。有时使用bind / unbind或containable来最小化查询数量是不够的。然后,您可以在find()查询中使用'joins' option。