Я нахожусь в Model-> beforeFind ($ queryData), пытаюсь добавить условие JOIN к queryData для модели, которая принадлежит ассоциациям. К сожалению, новый JOIN ссылается на таблицу в ассоциации ownTo, поэтому он должен появиться ПОСЛЕ ОТВЕТА в запросе.
Вот мой Tagged-> принадлежит к ассоциации:
app\plugins\tags\models\tagged.php (line 192)
Array
(
[Tag] => Array
(
[className] => Tag
[foreignKey] => tag_id
[conditions] =>
[fields] =>
[order] =>
[counterCache] =>
)
[Group] => Array
(
[className] => Group
[foreignKey] => foreign_key
[conditions] => Array
(
[Tagged.model] => Group
)
[fields] =>
[order] =>
[counterCache] =>
)
)
Вот JOIN, добавленный в Tagged-> beforeFind (), обратите внимание на то, что присоединения ownTo еще не были добавлены:
app\plugins\tags\models\tagged.php (line 194)
Array
(
[conditions] => Array
(
[Tag.keyname] => europe
)
[fields] => Array
(
[0] => DISTINCT Group.*
[1] => GroupPermission.*
)
[joins] => Array
(
[0] => Array
(
[table] => permissions
[alias] => GroupPermission
[foreignKey] =>
[type] => INNER
[conditions] => Array
(
[GroupPermission.model] => Group
[0] => GroupPermission.foreignId = Group.id
[or] => Array
( ... )
)
)
)
[limit] =>
[offset] =>
[order] => Array
(
[0] =>
)
[page] => 1
[group] =>
[callbacks] => 1
[by] => europe
[model] => Group
)
Когда я проверяю вывод, он завершается с ошибкой «1054: неизвестный столбец« Group.id »в« предложении »», потому что соединение разрешений появилось ДО объединения групп.
SELECT DISTINCT `Group`.*, `GroupPermission`.*
FROM `tagged` AS `Tagged`
INNER JOIN permissions AS `GroupPermission` ON (`GroupPermission`.`model` = 'Group' AND `GroupPermission`.`foreignId` = `Group`.`id` AND (...))
LEFT JOIN `tags` AS `Tag` ON (`Tagged`.`tag_id` = `Tag`.`id`)
LEFT JOIN `groups` AS `Group` ON (`Tagged`.`foreign_key` = `Group`.`id` AND `Tagged`.`model` = 'Group')
WHERE `Tag`.`keyname` = 'europe'
Но этот SQL (с присоединенными разрешениями, перенесенными в конец) работает нормально:
SELECT DISTINCT `Group`.*, `GroupPermission`.*
FROM `tagged` AS `Tagged`
LEFT JOIN `tags` AS `Tag` ON (`Tagged`.`tag_id` = `Tag`.`id`)
LEFT JOIN `groups` AS `Group` ON (`Tagged`.`foreign_key` = `Group`.`id` AND `Tagged`.`model` = 'Group')
INNER JOIN permissions AS `GroupPermission` ON (`GroupPermission`.`model` = 'Group' AND `GroupPermission`.`foreignId` = `Group`.`id` AND (...))
WHERE `Tag`.`keyname` = 'europe'
Как мне добавить свое объединение в beforeFind () после присоединения к нему?