Я считаю, что проблема в следующем:
$verified = $unverified = $rejected = $record;
Все эти переменные относятся к одному и тому же объекту запроса. Теперь первая строка будет работать:
$content['verified'] = $verified->where(['status' => Record::StatusVerified])->count();
Однако во втором операторе:
$content['Rejected'] = $rejected->where(['status' => Record::StatusRejected])->count();
Это не работает, потому что $verified
и $rejected
относятся к одному и тому же запрос. $rejected
добавьте еще одно условие к предыдущему запросу, и основной запрос будет примерно таким:
SELECT COUNT(id) FROM records
WHERE city = 'some_city_id'
AND status = 'verified'
AND status = 'rejected'
Теперь приведенный выше запрос явно возвращает ноль, потому что нет записей с обоими статусами.
На мой взгляд, лучший подход - просто использовать group by
:
SELECT COUNT(id), status FROM records
GROUP BY status
WHERE city = 'some_city_id'
AND status in (‘verified', ‘rejected’, ‘unverified’)
Или «быстрый и грязный» подход (который я не рекомендую) - это клонировать исходный запрос:
$verified = clone $record;
$unverified = clone $record;
$rejected = clone $record;
$content['verified'] = $verified->where(['status' => Record::StatusVerified])->count();
$content['Rejected'] = $rejected->where(['status' => Record::StatusRejected])->count();
$content['Unverified'] = $unverified->where(['status' => Record::StatusUnverified])->count();