Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp模型关联及其所需的mysql查询量_Mysql_Cakephp_Model_Associations - Fatal编程技术网

Cakephp模型关联及其所需的mysql查询量

Cakephp模型关联及其所需的mysql查询量,mysql,cakephp,model,associations,Mysql,Cakephp,Model,Associations,我有一个相当简单的数据模型,但我有一个称为“item”的中心实体,它通过1对1/1对多关系与其他7个实体关联。 一切顺利。但是在大多数使用项目模型的操作中,我不需要项目模型中的任何关联——因此mysql最终会发出许多不必要的查询(因为“项目”模型类中定义了关联) 我在想什么是减少这些不必要的查询的最好方法- 我正在考虑从模型类中删除所有关联,使所有模型都可包含,并在需要时在运行时创建关联 另一种选择是在有意义的地方简单地使用bindModel/unbindModel 我不确定哪种方法更好,也不确

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

我在想什么是减少这些不必要的查询的最好方法- 我正在考虑从模型类中删除所有关联,使所有模型都可包含,并在需要时在运行时创建关联

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

我不确定哪种方法更好,也不确定是否有其他更合适的方法来最小化那些不必要的mysql查询

任何反馈都很好:)

在发出find()之前,请将recursive属性设置为0:

$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'));