回答

收藏

Laravel在withCount方法上使用where子句

技术问答 技术问答 214 人阅读 | 0 人回复 | 2023-09-14

我正在尝试使用这段代码在laravel雄辩的查询生成器的withCount方法上执行where子句。' L9 C( A6 D: z& a& [6 R3 m& |
$posts = Post::withCount('upvotes')->where('upvotes_count', '>', 5)->get();
) U# U! J0 A# d2 W& u! p- N: e这段代码给了我这个错误。
& w/ X" U" }* E! Z, e4 |3 s/ `6 s, }% y
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘upvotes_count’ in ‘where clause’ (SQL: select , (select count() from upvotes where upvotes.upvoteable_id = posts.id and upvotes.upvoteable_type = App\Post) as upvotes_count from posts where upvotes_count > 5)) r* Y  S; R- _* g& D$ Y3 |: e5 s

* h# v/ l  Y$ o$ s1 a因此,根据我的猜测,未选择upvotes_count,因此未找到该列,但是,如果执行此代码,则可以。
/ ~1 I# z, ], r1 d$posts = Post::withCount('upvotes')->get();
: F& p! e( h2 G: T3 I3 _7 L% L然后我得到这个输出。9 q' L3 [4 l9 b7 `0 C
{
! n9 [2 ]. [4 i/ d7 n- s"id": 1,
. c9 q3 O8 T# t  Y; a8 f3 P$ ?/ A"user_id": 15,
# k0 h1 _1 A# h6 I( {"title": "Voluptatum voluptas sint delectus unde amet quis.",- X+ L) R- S. }6 |# D6 f& x
"created_at": "2016-10-07 13:47:48",- z# R" z. u# b
"updated_at": "2016-10-07 13:47:48",2 {0 B' l  S/ z$ ^; [+ C# D
"upvotes_count": 7
, M9 i' }( p# l  `, }6 P5 h},
1 r  W8 X* b8 {1 L( B{
; ]5 F) q) F+ z4 f3 _% p5 m"id": 2,% f) X! g, f" z/ Q1 T  S
"user_id": 2,
; h- z$ Y6 h4 y$ j8 n: m"title": "Molestiae in labore qui atque.",
  [6 V0 R3 B9 s1 p* k"created_at": "2016-10-07 13:47:48",
  Y0 G& [% o: Y6 i, F" O"updated_at": "2016-10-07 13:47:48",
. b8 W( f- t" ]  T7 D. t3 n. u6 d. m! S"upvotes_count": 2* A& X; [* |9 e$ r
},
. z  h6 G, r3 Z( W' B+ ?- |# F这基本上意味着选择了upvotes_count,因此我对如何解决此问题感到非常困惑。2 I: @( s) |7 D! K" Q! t5 l0 [$ A
(下面我给出了到目前为止我尝试过的更多选项,以及与之相关的相应错误。)
1 a* J+ V1 I% ?, F* ?) y$posts = Post::where('id', $id)->withCount(['upvotes' => function($query) {, w+ ^, Z5 x9 M5 R
        $query->where('upvotes_count', '>', 5);" W% n8 L4 }5 N7 B9 }; x. C
    }])->get();
3 t  X' E' d& {3 a2 k. R错误。% \6 I8 u, P' w0 l# a: C8 o
) E0 S; C% x! E# D, d7 c
SQLSTATE[42S22]: Column not found: 1247 Reference ‘upvotes_count’ not supported (forward reference in item list) (SQL: select , (select count() from upvotes where upvotes.upvoteable_id = posts.id and upvotes.upvoteable_type = App\Post and upvotes_count > 5) as upvotes_count from posts where id = 1)( v# D. t- E' ?7 O2 e6 p9 c- X
1 V/ A1 i2 g; u' L' I0 Z: }
代码。
" U8 |% E* F) ]* {( x+ M$posts = Post::where('id', $id)->with(['upvotes' => function($query) {+ b) S' r/ x$ m& ^
        $query->select('upvoteable_id AS upvotes_count');. B( M% g# P4 u9 X. d) U
    }])->where('upvotes_count', '>', 5)->get();; r# u4 C! `) G* r3 ?" Z; z

6 G4 u3 d  ^. a, R( r! a$posts = \App\Post::where('id', $id)->with(['upvotes' => function($query) {
% W$ \3 a6 W, v1 K! N( L        $query->selectRaw('upvoteable_id AS upvotes_count');+ n; A! i1 K2 C! A3 G1 M6 c
    }])->where('upvotes_count', '>', 5)->get();, r0 t5 h8 d& ]( G' Y
错误。; J( U1 H6 V+ A1 q9 q/ Y/ Z

( N. `2 {& s7 h) {SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ upvotes_count”(SQL:从postswhere
4 F0 S- j$ A$ J) ^. D8 G! T$ w1 fid= 1和upvotes_count> 5中选择* )
! A" s0 q1 I) j2 L- _$ B6 w' u
1 V! K8 c. v; o! z, M- ?
我只想在与父模型有关系的count()方法上使用where子句。
6 ?7 L3 T6 h- D  D                7 {. [/ p2 E& W. f4 L4 G
解决方案:
) E/ [9 V2 |4 h' |1 y                " _/ B8 [2 i0 C6 |, P# j( x1 f

# l3 \0 K& y" j# {( x
- \* ]5 Y; C& {4 Q0 h1 `' L                您可以使用以下方法获得所需的结果:
+ e6 h$ M9 ~7 t9 `4 y' N# e7 U& W$posts = Post::withCount('upvotes'), ], _* j7 y' t- Q! B7 \6 R
         ->having('upvotes_count', '>', 5)
1 R3 v) s9 a1 n# _. s2 f         ->get();
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则