首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果不在whereIn()中,则雄辩地创建列

如果不在whereIn()中,则雄辩地创建列
EN

Stack Overflow用户
提问于 2016-02-07 10:35:04
回答 1查看 102关注 0票数 0

我有一个类似这样的查询:

代码语言:javascript
运行
复制
$valid_statuses = array('1', '2', '3');

$results = User::with(['posts' => function($query) use ($valid_statuses) {
            $query->whereIn('status', $valid_statuses);
        }
    ])
    ->get();

该表的示例如下所示:

代码语言:javascript
运行
复制
+----+---------+--------+
| id | post_id | status |
+----+---------+--------+
|  1 |       1 |      1 |
|  2 |       1 |      2 |
|  3 |       2 |      1 |
|  4 |       2 |      3 |
+----+---------+--------+

我需要查询做的是,如果post_id缺少valid_status,它需要将缺少的状态添加到查询结果中。输出的结果查询应该如下所示:

代码语言:javascript
运行
复制
+----+---------+--------+
| id | post_id | status |
+----+---------+--------+
|  1 |       1 |      1 |
|  2 |       1 |      2 |
|  3 |       1 |      3 |
|  4 |       2 |      1 |
|  5 |       2 |      2 |
|  6 |       2 |      3 |
+----+---------+--------+

我该怎么做呢?

EN

Stack Overflow用户

发布于 2016-02-07 11:20:41

如果Post和Status模型之间是多对多关系,您可以这样做。

维护原始数据库记录:

代码语言:javascript
运行
复制
foreach($valid_statuses as $status_id) {
    $have_status = Post::whereHas('status_id', $status_id)->lists('id');
    $need_status = Post::whereNotIn('id', $valid_posts)->lists('id');
    Status::find($status_id)->posts()->sync($need_status, false);
}

或者如果你不关心原始记录:

代码语言:javascript
运行
复制
foreach($valid_statuses as $status_id) {
    Status::find($status_id)->posts()->sync(Post::all()->lists('id'));
}  
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35249060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档