Я пытаюсь отфильтровать результаты таблицы на основе двух связанных таблиц, используя логическую дизъюнкцию (ИЛИ).
Например, я хочу найти все Products
фильтрации для Reviews
и Reviews.Users
.
, где Reviews.Users.super
равно ->eq(true)
ИЛИ
, где Reviews.visibility
равно ->eq('visibility', 'public')
И Reviews.published
равно ->isNotNull('published')
с использованием двух ->innerJoinWith
создает конъюнкцию.
this->Products->find()
->distinct()
->where(['Products.status' => 'current'])
->contain(['Reviews.Users'])
->innerJoinWith('Reviews', function($q) {
return $q
->where(['Reviews.visibility' => 'public'])
->andWhere(['Reviews.published IS NOT' => null]);
})
->innerJoinWith('Reviews.Users', function($q) {
return $q
->where(['Users.super' => true]);
})
->all();
при попытке использовать leftJoin
s в соответствии с предложением @ndm я получаю
$this->Products->find()
->leftJoinWith('Reviews')
->leftJoinWith('Reviews.Users')
->where([
'OR' => [
'Reviews.Users.super' => true,
'Reviews.visibility' => 'public'
]
])
->andWhere([
'Reviews.published IS NOT' => null
])
Столбец не найден: 1054 Неизвестный столбец 'Reviews.Users.super' в 'предложении where'