Laravel 5.2 отношение orderBy сCount приводит к ошибке SQL из-за неудачной попытки получить столбец вместо count - PullRequest
0 голосов
/ 30 августа 2018

Цель состоит в том, чтобы отсортировать мои кампании по представлениям в моей фильтрации, поэтому у меня есть таблица аналитики с отношениями к моим кампаниям

Модель моей кампании (имя БД "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 в моем шаблоне блэйда, он покажет количество отлично.

Спасибо за потраченное время, надеюсь, кто-нибудь подскажет, что я здесь делаю не так.

1 Ответ

0 голосов
/ 30 августа 2018

Ошибка, которую вы получаете, является результатом метода count (), а не get (). как то так

$query = Ad::withCount('views')->with('tags');
$query->where("is_active", "=", 1);
$query->where("status", "=", 1);
$query->orderBy('views_count', 'DESC');
$campaignCount = $query->count();

, которая заменяет сложную выбранную деталь на:

select count(*) as aggregate

если вам нужны count () и get (), сделайте это так:

$query = Ad::withCount('views')->with('tags');
$query->where("is_active", "=", 1);
$query->where("status", "=", 1);
$campaignCount = $query->count();

$query->orderBy('views_count', 'DESC');
$campaigns = $query->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...