Цель состоит в том, чтобы отсортировать мои кампании по представлениям в моей фильтрации, поэтому у меня есть таблица аналитики с отношениями к моим кампаниям
Модель моей кампании (имя БД "ads"):
public function views() {
return $this->hasMany('App\Analytic', 'foreign_id', 'id')->where('foreign_type', '=', 'campaign');
}
Контроллер моей фильтрации:
$query = Ad::withCount('views')->with('tags');
$query->where("is_active", "=", 1);
$query->where("status", "=", 1);
$query->orderBy('views_count', 'DESC');
$campaigns = $query->get();
Теперь причина не писать его без части $ query->, потому что в запросе много операторов if в зависимости от настроек фильтрации.
Ошибка, которую я получаю:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'views_count' in 'order clause' (SQL: select count(*) as aggregate from `ads` where `is_active` = 1 and `status` = 1 and `from_year` >= 7 and `to_year` <= 88 and `price` >= 1000 and `price` <= 64000 order by `views_count` desc)
Ошибка в том, что он пытается извлечь столбец, но я не могу понять, почему.
Если я попытаюсь получить доступ к $campaign->views_count
в моем шаблоне блэйда, он покажет количество отлично.
Спасибо за потраченное время, надеюсь, кто-нибудь подскажет, что я здесь делаю не так.