首页 > 解决方案 > Laravel中的多对多并按关系条件选择数据

问题描述

我的 Laravel 项目中有下一张表

ID 标题
1 post1
2 post2
3 post3
4 post4
5 post5

标签

ID 姓名
1 标签1
2 标签2
3 标签3
4 标签4
5 标签5

post_tag

post_id tag_id
1 1
1 2
1 3
1 5
2 2
3 2
3 3
3 5
4 2
4 3
4 4
4 5
5 3
5 4

换句话说

邮政 标签
post1 标签1 标签2 标签3 标签5
post2 标签2
post3 标签2 标签3 标签5
post4 标签2 标签3 标签4 标签5
post5 标签3 标签4

我有查询 - 类似的东西:(+tag2+tag3-tag4可以是不同的长度;+ = 包含;- = 结果除外)我如何才能仅使用之前带有“+”的标签和之前带有“-”的标签发布帖子?

使用示例表:post1(有tag2 AND tag3 AND NOT tag4) post3(有tag2 AND tag3 AND NOT tag4)

我尝试使用下一个

$posts = Post::query()
->with('tags')
->whereHas('tags', function ($query) {
 $query->whereIn('tags.name', ['tag2', 'tag3'])
    ->whereNnotIn('tags.name', ['tag4']);
})
->get();

但它没有给我需要的结果有人可以帮我吗?

谢谢!

标签: laraveleloquentmany-to-manylaravel-relations

解决方案


推荐阅读