Я хочу сделать условие для моих атрибутов HABTM
У меня есть следующие отношения HABTM в CakePHP 2.x:
Practise.php
public $hasAndBelongsToMany = array(
'Attribute' => array(
'className' => 'Attribute',
'joinTable' => 'practises_attributes',
'foreignKey' => 'practise_id',
'associationForeignKey' => 'attribute_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
)
);
Attribute.php
public $hasAndBelongsToMany = array(
'Practise' => array(
'className' => 'Practise',
'joinTable' => 'practises_attributes',
'foreignKey' => 'attribute_id',
'associationForeignKey' => 'practise_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
)
);
Теперь я хочу найти все, включая условие для атрибутов в моем PractiseController.php
PractiseController.php
$cond['Attribute.id'] = array(1,2,3);
$this->Practise->find('all', array('conditions' => $cond));
Тогда я получаю следующую ошибку:
Ошибка: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «Attribute.id» в «предложении где»
SQL-запрос:
ВЫБРАТЬ
Practise
,id
,
Practise
,title
,
Practise
,body
,
ОТ db
,practises
КАК Practise
ГДЕ Attribute
,id
IN (1, 2, 3)
Как я могу сделать так, чтобы CakePHP также присоединился к таблице HABTM в поисковом запросе?
Вы можете использовать, например, содержать
$this->Practise->find('all', array('contain' => 'Attribute.id = whatever'));
Вы также можете присоединиться вручную с помощью:
$options['joins'] = array(
array('table' => 'practises_attributes',
'alias' => 'PractiseAttribute',
'type' => 'INNER',
'conditions' => array(
'Attribute.id = whatever',
)
) );
Других решений пока нет …