获取带有列值不超过7的标签的帖子

时间:2018-10-09 09:09:04

标签: laravel eloquent

说,我有两个存在多对多关系的实体:

posts

-id
-title    
-body

tags

-id  
-title
-sequence (int)

post_tag

-post_id
-tag_id

我想抓住那些标签的标签,标签的最后sequence值为7。忍受我。一个例子更有意义:

post_tag:
=========
-post_id: 1
-tag_id: 3

-post_id: 1
-tag_id: 4
tags:
=====
-id: 3
-sequence: 2

-id: 4
-sequence: 7

 Post ID 1 should be returned

post_tag:
=========
-post_id: 2
-tag_id: 4

-post_id: 2
-tag_id: 5
tags:
=====
-id: 4
-sequence: 7

-id: 5
-sequence: 8

Post ID 2 should NOT be returned because it has a tag whose sequence exceeds 7.

post_tag:
=========
-post_id: 3
-tag_id: 2

-post_id: 3
-tag_id: 3

-post_id: 3
-tag_id: 4
tags:
=====
-id: 2
-sequence: 1

-id: 3
-sequence: 2

-id: 4
-sequence: 7

 Post ID 3 should be returned

这是我到目前为止尝试过的:

$posts = Post::whereHas('tags', function($q){ $q->where('sequence', 7);})->get();

但是它甚至返回序列大于7的那些帖子。我没有抱怨。我知道为什么它返回带有大于7的标签的帖子。我只是不知道如何解决这个问题。

提示:就查询而言,该问题可以认为是:

  

不超过X和X(含X)

2 个答案:

答案 0 :(得分:2)

您可能正在寻找的是$posts = Post::whereHas('tags', function ($q) { $q->where('sequence', 7); }) ->whereDoesntHave('tags', function($q) { $q->where('sequence', '>', 7); })->get();

NAME                                               TYPE        VALUE                                                                                                
-------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
archive_lag_target                                 integer     0                                                                                                    
db_big_table_cache_percent_target                  string      0                                                                                                    
db_flashback_retention_target                      integer     1440                                                                                                 
fast_start_io_target                               integer     0                                                                                                    
fast_start_mttr_target                             integer     0                                                                                                    
memory_max_target                                  big integer 0                                                                                                    
memory_target                                      big integer 0                                                                                                    
parallel_servers_target                            integer     64                                                                                                   
pga_aggregate_target                               big integer 816M                                                                                                 
sga_target                                         big integer 2448M  

答案 1 :(得分:1)

您真正需要的是检查是否等于和小于,就像这样:

$posts = Post::whereHas('tags', function($q) { $q->where('sequence', '<=', 7); })->get();