不要 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')
 ));