У меня странное поведение при использовании функции notMatching
построителя запросов в сочетании со стандартным where
. Параметры, указанные в массивах OR
/ AND
, кажутся несоответствующими (точнее, кажется, что он берет последний и использует его для предпоследнего).
Вот мой запрос:
$myModel
->find('list')
->where(['column' => 'a value to match']) // If I remove the entire line it works
->notMatching('AnotherModel', function ($query) use ($value, $anotherValue) {
return $query->where([
'OR' => [
['secondColumn >=' => $value],
['secondColumn <=' => $value]
],
'thirdColumn' => $anotherValue
]);
});
А вот сгенерированный SQL (упрощенный):
`column` = `a value to match`
AND (
`MyModel`.`id` NOT IN (
SELECT
...
FROM
...
WHERE
(
(
`secondColumn` >= $value
OR `secondColumn` <= $anotherValue /* The issue */
)
AND `thirdColumn` = $anotherValue
)
)
)
Как видите, $anotherValue
используется вместо $value
. Если я удалю весь первый where
(после find
), он будет работать как исключено. И что интересно, у меня нет проблем с matching
или innerJoinWith
.