cakephp: Как сформулировать условия для левого соединения

81
9

У меня есть два объекта: clefs и lots с ассоциацией nn. Поэтому я определяю три модели: Clefs, lots и ClefLots:

class ClefLots extends AppModel {
var $specific = true;
public $name = 'ClefLots';

public $belongsTo = array(
'Clefs' => array(
'className' => 'Clef',
'foreignKey' => 'clefs_id'
),
'Lots' => array(
'className' => 'Lot',
'foreignKey' => 'lots_id'
)
);
}

Теперь мне нужно указать для данного ключа, которые не связаны с ключом. Этот запрос работает:

SELECT
'Lot'.'id', 'Lot'.'title', 'ClefLots'.'clefs_id', 'ClefLots'.'lots_id'
FROM
'dunkerque52'.'lots' AS 'Lot'
LEFT JOIN
'dunkerque52'.'clef_lots' AS 'ClefLots'
ON ((('ClefLots'.'clefs_id' = '539c1896-1cc0-48ac-a2d6-2c9e5b79c62b')
AND ('ClefLots'.'lots_id' = Lot.id)))
WHERE
'ClefLots'.'lots_id' IS NULL

С cakephp этот код не работает:

$this->loadModel('ClefLots');
$conditions = array(
'fields' => array(
'Lot.id', 'Lot.title', 'ClefLots.clefs_id', 'ClefLots.lots_id'
),
'joins' => array(
array(
'table' => 'clef_lots',
'alias' => 'ClefLots',
'type' => 'left',
'conditions' => array(
array(
'ClefLots.clefs_id' => $id,
'ClefLots.lots_id => Lot.id'
)
),
),
),
'conditions' => array(
"ClefLots.lots_id" => null,
)
);
$lots = $this->Lot->find('list',$conditions);

и этот код неверен:

$this->loadModel('ClefLots');
$conditions = array(
'fields' => array(
'Lot.id', 'Lot.title', 'ClefLots.clefs_id', 'ClefLots.lots_id'
),
'joins' => array(
array(
'table' => 'clef_lots',
'alias' => 'ClefLots',
'type' => 'left',
'conditions' => array(
array(
'ClefLots.clefs_id' => $id,
'ClefLots.lots_id' => 'Lot.id'
)
),
),
),
'conditions' => array(
"ClefLots.lots_id" => null,
)
);
$lots = $this->Lot->find('list',$conditions);

Поэтому мой вопрос: как указать условия в левом соединении, чтобы получить правильный запрос?

спросил(а) 2014-06-30T17:53:00+04:00 6 лет, 3 месяца назад
1
Решение
106

Ваши conditions массив неверен, он не должен содержать вложенный массив, и фрагменты SQL должны передаваться в виде строк.

Также в вашем фрагменте SQL есть a > after = которого не должно быть.

Вот как должны выглядеть условия соединения:

'conditions' => array(
'ClefLots.clefs_id' => $id,
'ClefLots.lots_id = Lot.id'
)

ответил(а) 2014-06-30T19:22:00+04:00 6 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема