Несоответствующие / неправильные параметры запроса с использованием notMatching и where - PullRequest
0 голосов
/ 09 мая 2020

У меня странное поведение при использовании функции 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.

1 Ответ

0 голосов
/ 16 мая 2020

Кажется, это исправлено в Cake PHP версии 3.8.12

...