Yii2 Запрос со сложной связью

Вообщем у меня есть сайт на yii2. Там на одной странице я вывожу, некоторые данные, запрос который я собираю выглядит так:

SELECT `cycle`.* 
FROM `cycle` 
LEFT JOIN `company` ON `cycle`.`company_id` = `company`.`id` 
LEFT JOIN `deadline` ON (`company`.`id` = `deadline`.`company_id`) 
                    AND (`deadline`.`year`='cycle.year') 
WHERE `cycle`.`id`='166'

Грубо говоря я в "циклах" (это если что название странички), тащу название компнии, связанные с дедлайны, при этом самых дедланов очень много, но мне нужно вытащить только с определенным годом, как видно из запросах, год я беру из цикла. Запрос в таком виде не работает, как мне его переделать, чтобы он начал работать? Просто фильтровать все дедлайны после получения такая себе идея.

Да код для запроса выглядит так:

$cycle = Cycle::find()->joinWith(['company.simplyDeadlines' => function ($query) {
     $query->onCondition([Deadline::tableName() . '.year' => Cycle::tableName() . '.year']);
}])->where([Cycle::tableName() . '.id' => $id])->asArray()->one();

Ответы (1 шт):

Автор решения: Akina

Попробуйте переписать так:

SELECT `cycle`.* 
FROM `cycle` 
LEFT JOIN `company` ON `cycle`.`company_id` = `company`.`id` 
LEFT JOIN `deadline` ON `company`.`id` = `deadline`.`company_id`                    
WHERE `cycle`.`id`='166'
  AND (`deadline`.`year`=`cycle`.`year` OR `deadline`.`year` IS NULL) 
-- или
-- AND COALESCE(`deadline`.`year`,`cycle`.`year`) = `cycle`.`year`

или

SELECT `cycle`.* 
FROM `cycle` 
LEFT JOIN `company` ON `cycle`.`company_id` = `company`.`id` 
LEFT JOIN `deadline` ON `company`.`id` = `deadline`.`company_id` 
                    AND `deadline`.`year`=`cycle`.`year`                   
WHERE `cycle`.`id`='166'
→ Ссылка