2013-12-24 2 views
0

У меня есть 2 модели: Option и модификатор с таким вариантом belongsTo Модификатор соотношением:связанные условия модели игнорируются

public $belongsTo = array(
'Modifier' => array(
    'className' => 'Modifier', 
    'foreignKey' => 'modifier_id', 
    'conditions' => array('Modifier.type' => '3'), 
    'fields' => 'Modifier.name', 
    'order' => 'Modifier.name ASC' 
) 
); 

В OptionsController я пытаюсь получить список Модификаторов:

$modifiers = $this->Option->Modifier->find('list'); 

И CakePHP генерирует SQL без условий, поэтому я получаю полный список модификаторов. Почему CakePHP 2.4.4 игнорирует условия, определенные в модели, принадлежит отношению? Он также игнорирует поля и порядок.

ответ

2

это правильное поведение

когда вы пишете:

$modifiers = $this->Option->Modifier->find('list'); 

вы только доступ к модели Modifier и не все модификаторы, связанные с Option.

добиться того, что вы хотите, вы должны сделать это:

$modifiers = $this->Option->Modifier->find(
    'list', 
    array('conditions' => array('Modifier.type' => '3') 
) 

вы также можете создать свой собственный тип найти (см manual)

class Modifier extends AppModel { 
    public $findMethods = array('type3' => true); 

    protected function _findType3($state, $query, $results = array()) { 
     if ($state === 'before') { 
      $query['conditions']['Modifier.type'] = 3; 
      return $query; 
     } 
     return $results; 
    } 
} 

и в контроллере это сделать

$modifiers = $this->Option->Modifier->find('type3'); 
+0

Я знаю, как найти аргументы) Почему CakePHP игнорирует настройки отношения? Они выглядят бесполезно. В каком случае CakePHP начинает использовать условия, поля и настройки порядка, строго определенные в модели? –

+1

при соединении столов – arilia