laravel - 获取列值不超过 7 的标签的帖子
问题描述
说,我有两个多对多关系的实体:
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 和 X)
解决方案
可能你正在寻找的是whereDoesntHave()
$posts = Post::whereHas('tags', function ($q) {
$q->where('sequence', 7);
})
->whereDoesntHave('tags', function($q) {
$q->where('sequence', '>', 7);
})->get();
推荐阅读
- c# - C# 在 ToString() 中自定义 DateTime 偏移格式
- python - TensorFlow 文档是如何创建的?(尤其是 Jupyter 笔记本部分)
- json - NextAuth中如何使用JWT存储数据
- python - on.message () 接受 0 个位置参数,但给出了 1 个(discord.py bot)
- lua - Lua 中的 const 和 close 关键字真的有什么作用吗?
- java - 通过 http 从其他 java Web 服务器远程更新 MDB 文件
- reactjs - 本地安装的 --save-dev eslint 不起作用
- python - 是否可以通过 python 的 ADB 模块刷模式?
- php - 如何在 Laravel 7 中使用原始 SQL 查询创建范围?
- python - Django:如何在创建同一类的新实例时访问以前的模型类实例?