- 45
- 0
先上一下代码
TopicController
public function show(Category $category, Topic $topic)
{
$order = request('order');
//$topics = $topic->where('category_id', $category->id)->withOrder($order)->paginate(20); //返回数据不正常,这个where并没有生效
$topics = $topic->withOrder($order)->where('category_id', $category->id)->paginate(20);
return view('topics.index', compact('topics', 'category'));
}
withOrder方法是在AppModelsTopic.php中定义
// 通过控制器传过来的order进行话题排序
public function scopeWithOrder($query, $order)
{
switch ($order) {
case 'recent':
$query = $this->recent();
break;
default:
$query = $this->recentReplied();
break;
}
// 这里调用with方法是为了防止N+1的问题
return $query->with('user', 'category');
}
// 按照创建时间倒序排列
public function scopeRecent($query)
{
return $query->orderBy('created_at', 'desc');
}
public function scopeRecentReplied($query)
{
return $query->orderBy('updated_at', 'desc');
}
实现的逻辑是查询某一个分类下的所有帖子列表。疑惑的问题就是在show方法中如果我先调用withOrder在调用where语句那么结果是正常的。
这是debug打出的sql
select * from `topics` where `category_id` = '1' order by `updated_at` desc limit 20 offset 0
如果我先使用$topic->where('oo', 'xx')->withOrder('oo', 'xx')那么这个where并没有生效。
下面这个是debug打出的sql
select * from `topics` order by `updated_at` desc limit 20 offset 0
所以我想问问laravel这底层是如何处理的。谢谢大家
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
