我在这里试图改进我的一个选择。 我的模型如下:
Network
--->hasMany Esx
--->hasAndBelongToMany Environment
网络可能有0个Esx和/或0个环境
所以这里我想选择一些网络信息和Esx部分,而不是环境信息。
$this->Network->find('all',array(
'conditions'=>array(
'Network.plateform'=>IAAS,
'Network.active'=>true),
'fields'=>array(
'Network.id',
'Network.name')
));
所以,我不能使用字段来仅选择vlan字段
我无法降低递归以删除环境,因为它也会删除Esx
我在SO上发现了另一个问题,建议使用$ this-> Network-> schema()并删除不需要的字段,但它不会返回hm和habtm结构。
简而言之,如何从此
转换此查询的结果0 => array(
'Network' => array(
'id' => '38',
'name' => 'HP_LOW'),
'Esx' => array(...),
'Environment' => array(...)
)...
到此
0 => array(
'Network' => array(
'id' => '38',
'name' => 'HP_LOW'),
'Esx' => array(...)
)...
目的不是取消设置环境字段,而是不选择它以提高数据库性能。
谢谢! Ps:Im'与cakephp合作2.6.2
答案 0 :(得分:1)
使用可包含的
请参阅手册here
在模型中,您必须启用可包含行为
class Networkextends AppModel {
public $actsAs = array('Containable');
}
然后在控制器中你可以做
$this->Network->find('all',array(
'conditions'=>array(
'Network.plateform'=>IAAS,
'Network.active'=>true),
'fields'=>array(
'Network.id',
'Network.name'),
'contain'=>array(
'Esx')
));