Cakephp模型关联以及它们需要的mysql查询量

时间:2010-06-30 12:56:11

标签: mysql cakephp model associations

我有一个相当简单的数据模型,但我有一个名为“item”的中心实体,它通过1对1/1对多关系与7个其他实体相关联。 一切顺利。但是在大多数与项目模型一起使用的操作中,我不需要项目模型中的任何关联 - 因此mysql最终会发出许多不必要的查询(因为“item”模型类中定义了关联)。

我正在考虑什么是最小化这些不必要的查询的最佳方法 - 我正在考虑从Model类中删除所有关联,使所有模型包含在内,并在运行时根据需要创建关联。

另一种选择是只在有意义的地方使用bindModel / unbindModel。

我不确定哪种方法更好,如果有另一种更合适的方法来最小化那些不必要的mysql查询。

任何反馈都会很棒:)

3 个答案:

答案 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

相关问题