laravel - Laravel 5.2 orderBy 与计数的关系导致 SQL 错误,因为尝试获取列而不是计数失败
问题描述
目标是按过滤中的视图对我的广告系列进行排序,这就是为什么我有一个与我的广告系列相关的分析表
我的广告系列模型(数据库名称是“广告”):
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
我的刀片模板,它会显示计数就好了。
谢谢你的时间,我希望有人能告诉我我在这里做错了什么。
解决方案
您得到的错误是 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();
推荐阅读
- pine-script - 价格框的 Pine 脚本
- karate - 我可以在空手道中使用 Scenario Outline 读取 2 个 .csv 文件吗
- database - 使用基于计时器的 gamma 脚本将数据从 Cogent Datahub 记录到数据库
- asp.net-core - 在不引导整个站点的情况下运行 NSwag
- python - 会议录音记录和总结
- typescript - 尝试保存到数据库时,TypeORM 更改了我的提交对象数据
- c - C 服务器/客户端回显
- react-navigation - React-navigation 材质顶部选项卡指示器样式
- javascript - 2D Canvas 上 createGraphics WEBGL 中的 orbitControl
- php - PDFlib 在定义的 fitbox 底部放置表格