Нужно преобразовать sql-запрос в drupal-вариан

Главные вкладки

Аватар пользователя Rewrq Rewrq 18 декабря 2022 в 8:35

Есть sql-запрос:
SELECT first_table.id FROM first_table
LEFT JOIN second_table ON first_table.id = second_table.company_id
WHERE second_table.review = 'confirmed' AND second_table.status = 'public' OR second_table.review is NULL AND second_table.status is NULL
GROUP BY first_table.id
ORDER BY COUNT(second_table.id) DESC;

Попробовал сам, но выдает неверный результат:

$subquery = $this->connection->select($this->_table, 'first_table');
$subquery->leftJoin('second_table_base', 'second_table', 'first_table.id = second_table.company_id');
$andCondition1 = $subquery->andConditionGroup()
->condition('second_table.status', 'public')
->condition('second_table.review', 'confirmed');
$andCondition2 = $subquery->andConditionGroup()
->isNull('second_table.review')
->isNull('second_table.status');
$subquery->orConditionGroup()
->condition($andCondition2)
->condition($andCondition1);
$subquery->addExpression('COUNT (second_table.id)', 'count');
$subquery->orderBy('count', 'DESC');
$subquery->groupBy('first_table.id');
$subquery->fields('first_table', ['id']);
$subquery->execute()->fetchCol();

Не могу понять где ошибся

Лучший ответ

Аватар пользователя Rewrq Rewrq 18 декабря 2022 в 8:47

Решил проблему:
Нужно было выражение orConditionGroup передать в $subquery->condition($orConditionGroup)

Комментарии