При использовании синтаксиса key => value
правое значение всегда будет подвергаться привязке / экранированию, если только это не объект выражения. Таким образом, ваше условие будет связывать Students.student_id
в виде буквенной строки или, возможно, в виде целого числа, то есть вы в конечном итоге получите SQL, например:
WHERE Users.id = 'Students.student_id'
или
WHERE Users.id = 0
Либо передайте \Cake\Database\Expression\IdentifierExpression
объект, например:
->where(['Users.id' => $mainQuery->identifier('Students.student_id')])
или в более старых версиях CakePHP:
->where(['Users.id' => new \Cake\Database\Expression\IdentifierExpression('Students.student_id')])
Или используйте построитель выражений, который поддерживает сравнение полей:
->where(function(\Cake\Database\Expression\QueryExpression $exp) {
return $exp->equalFields('Users.id', 'Students.student_id');
})
В документации по дополнительным условиям есть пример для вашего варианта использования (см. Пример exists()
).
См. Также