不要在查找中选择habtm字段

时间:2016-06-22 09:42:25

标签: cakephp has-and-belongs-to-many cakephp-2.6

我在这里试图改进我的一个选择。 我的模型如下:

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

1 个答案:

答案 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')
 ));