不要 select 查找中的 habtm 字段
Don't select an habtm field in a find
我在这里试图改进我的 select。
我的模型如下:
Network
--->hasMany Esx
--->hasAndBelongToMany Environment
一个网络可能有 0 个 Esx and/or 0 个环境
所以这里我想select一些网络信息和Esx部分,但不是环境信息。
$this->Network->find('all',array(
'conditions'=>array(
'Network.plateform'=>IAAS,
'Network.active'=>true),
'fields'=>array(
'Network.id',
'Network.name')
));
所以,我不能将字段仅用于 select vlan 字段
我不能降低递归来删除环境,因为它也会删除 Esx
我在 SO 上发现了另一个问题,建议使用 $this->Network->schema() 并删除不需要的字段,但它没有 return 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(...)
)...
目的不仅仅是取消环境字段的设置,而是不select它以提高数据库性能。
谢谢!
Ps: 我正在使用 cakephp 2.6.2
使用可包容
查看手册here
在您的模型中,您必须启用 Containable Behavior
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')
));
我在这里试图改进我的 select。 我的模型如下:
Network
--->hasMany Esx
--->hasAndBelongToMany Environment
一个网络可能有 0 个 Esx and/or 0 个环境
所以这里我想select一些网络信息和Esx部分,但不是环境信息。
$this->Network->find('all',array(
'conditions'=>array(
'Network.plateform'=>IAAS,
'Network.active'=>true),
'fields'=>array(
'Network.id',
'Network.name')
));
所以,我不能将字段仅用于 select vlan 字段
我不能降低递归来删除环境,因为它也会删除 Esx
我在 SO 上发现了另一个问题,建议使用 $this->Network->schema() 并删除不需要的字段,但它没有 return 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(...)
)...
目的不仅仅是取消环境字段的设置,而是不select它以提高数据库性能。
谢谢! Ps: 我正在使用 cakephp 2.6.2
使用可包容
查看手册here
在您的模型中,您必须启用 Containable Behavior
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')
));