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