Laravel 5.2 orderBy与ofCount的关系导致SQL错误,因为尝试获取列而不是计数失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.2 orderBy与ofCount的关系导致SQL错误,因为尝试获取列而不是计数失败相关的知识,希望对你有一定的参考价值。

目标是通过我的过滤中的视图对我的广告系列进行排序,这就是为什么我有一个与我的广告系列有关系的分析表

我的广告系列模型(数据库名称为“广告”):

public function views() {
    return $this->hasMany('AppAnalytic', '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) 

错误是它尝试获取列,但我无法弄清楚原因。如果我尝试在我的刀片模板中访问qazxsw poi,它会显示计数就好了。

谢谢你的时间,我希望有人能告诉我这里我做错了什么。

答案

你得到的错误是count()方法而不是get()的结果。这样的事情

$campaign->views_count

用以下代码替换复杂的选择部分:

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

如果你需要count()和get(),就这样做:

select count(*) as aggregate

以上是关于Laravel 5.2 orderBy与ofCount的关系导致SQL错误,因为尝试获取列而不是计数失败的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 API 与 Lumen 相比如何? [复制]

Laravel 5.2通过与用户邮政编码的距离搜索用户

Laravel 5.2 HTTP(高级)路由与创建控制器

Laravel、MySQL 空间点距离:orderBy 和获取距离

如何在 LARAVEL 5.2 中将数据存储到数据库中

Laravel 5.2 会话不持久