2016-06-22 2 views
0

Я здесь пытаюсь улучшить один из моих избранных. Моя модель выглядит следующим образом:Не выбирайте поле habtm в поиске

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

Таким образом, я не могу использовать поля только выбрать ВЛС поля
не могу понизить рекурсивный для удаления среды, поскольку она также удалить ESX я нашел так что другой вопрос, который предлагается использовать $ 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: Workin Im»с CakePHP 2.6.2

+0

Вы пытались сдержать? – arilia

ответ

1

использование Containable

смотрите в руководстве here

в вашей модели

вы должны включить Containable поведение

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') 
)); 
+0

Черт, я видел и пытался «содержать», но я пропустил акты в режиме ... Спасибо! –