Laravel using where clause on a withCount method(Laravel 在 withCount 方法上使用 where 子句)
问题描述
我正在尝试使用这段代码对 laravel 的 eloquent 查询构建器的 withCount 方法执行 where 子句.
I am trying to do a where clause on withCount method of laravel's eloquent query builder using this piece of code.
$posts = Post::withCount('upvotes')->where('upvotes_count', '>', 5)->get();
这段代码给了我这个错误.
and this code is giving me this error.
SQLSTATE[42S22]:未找到列:1054 未知列upvotes_count"在where 子句"(SQL:select , (select count() from upvotes whereupvotes.upvoteable_id = posts.id 和 upvotes.upvoteable_type = AppPost) as upvotes_count from posts where upvotes_count > 5)
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'upvotes_count' in 'where clause' (SQL: select , (select count() from
upvoteswhereupvotes.upvoteable_id=posts.idandupvotes.upvoteable_type= AppPost) asupvotes_countfrompostswhereupvotes_count> 5)
所以我可以猜测的是 upvotes_count 没有被选中,因此没有找到该列,但是如果我执行这段代码.
So from what I can guess is that upvotes_count isn't selected and hence the column is not being found, BUT if I execute this piece of code.
$posts = Post::withCount('upvotes')->get();
然后我得到这个输出.
{
"id": 1,
"user_id": 15,
"title": "Voluptatum voluptas sint delectus unde amet quis.",
"created_at": "2016-10-07 13:47:48",
"updated_at": "2016-10-07 13:47:48",
"upvotes_count": 7
},
{
"id": 2,
"user_id": 2,
"title": "Molestiae in labore qui atque.",
"created_at": "2016-10-07 13:47:48",
"updated_at": "2016-10-07 13:47:48",
"upvotes_count": 2
},
这基本上意味着 upvotes_count 被选中,因此我真的很困惑如何解决这个问题.
Which basically means that upvotes_count is being selected, hence i am really confused about how to solve this problem.
(下面给出了我迄今为止尝试过的更多选项以及与之相关的相应错误.)
(More options that I tried so far are given below with the respective error associated to it.)
$posts = Post::where('id', $id)->withCount(['upvotes' => function($query) {
        $query->where('upvotes_count', '>', 5);
    }])->get();
错误.
SQLSTATE[42S22]: Column not found: 1247 Reference 'upvotes_count' not supported (forward reference in item list) (SQL: select , (select count() from upvotes)code> where upvotes.upvoteable_id = posts.id and upvotes.upvoteable_type = AppPost and upvotes_count > 5) as upvotes_count from posts where id =1)
SQLSTATE[42S22]: Column not found: 1247 Reference 'upvotes_count' not supported (forward reference in item list) (SQL: select , (select count() from
upvoteswhereupvotes.upvoteable_id=posts.idandupvotes.upvoteable_type= AppPost andupvotes_count> 5) asupvotes_countfrompostswhereid= 1)
代码.
$posts = Post::where('id', $id)->with(['upvotes' => function($query) {
        $query->select('upvoteable_id AS upvotes_count');
    }])->where('upvotes_count', '>', 5)->get();
和
$posts = AppPost::where('id', $id)->with(['upvotes' => function($query) {
        $query->selectRaw('upvoteable_id AS upvotes_count');
    }])->where('upvotes_count', '>', 5)->get();
错误.
SQLSTATE[42S22]:未找到列:1054 Unknown column 'upvotes_count' in 'where clause'(SQL:从 posts 中选择 * 其中 id = 1 和 <代码>upvotes_count > 5)
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'upvotes_count' in 'where clause' (SQL: select * from
postswhereid= 1 andupvotes_count> 5)
<小时>
我只想在与父模型有关系的 count() 方法上使用 where 子句.
I just want to use where clause on a count() method which is in a relationship with a parent model.
推荐答案
您可以通过使用:
$posts = Post::withCount('upvotes')
         ->having('upvotes_count', '>', 5)
         ->get();
这篇关于Laravel 在 withCount 方法上使用 where 子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Laravel 在 withCount 方法上使用 where 子句
 
				
         
 
            
        基础教程推荐
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
- PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
- 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
- Web 服务器如何处理请求? 2021-01-01
- php中的PDF导出 2022-01-01
- 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
- 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
- php中的foreach复选框POST 2021-01-01
- 将变量从树枝传递给 js 2022-01-01
- Yii2 - 在运行时设置邮件传输参数 2022-01-01
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
				 
				 
				 
				