如何在查询中使用 ID 列表

Posted

技术标签:

【中文标题】如何在查询中使用 ID 列表【英文标题】:How to use a list of IDs in a query 【发布时间】:2021-04-28 17:48:10 【问题描述】:

我有一个查询过滤用户以按 ID 显示给管理员,现在我想扩展此查询以容纳更多 ID,例如 2、3、4、5 和 6,那么我如何将其排列在列表中

public function vipusers()

    $data['title'] = 'Vip Users';
    $is_super = !auth()->guard('admin')->user()->is_super;

    $data['users'] = Users::when($is_super, function ($q) 
        $q->where('id', '!=', 1);
    )
        ->orderBy('id', 'DESC')->get();

    return view('admin.dashboard.manage', $data);

【问题讨论】:

【参考方案1】:

您可以使用whereIn :https://laravel.com/docs/8.x/queries#additional-where-clauses

$ids = [2, 3, 4, 5, 6];
$users = Users::whereIn('id', $ids)->orderBy('id', 'DESC')->get();
...

【讨论】:

【参考方案2】:

扩展@Bazaim 的答案。

考虑使用函数来遍历所有用户,方法是将表中的 id 传递给函数。考虑使用以下 sn-p。

public function vipusers($id)

    $data['title'] = 'Vip Users';
    $is_super = !auth()->guard('admin')->user()->is_super;

    $data['users'] = Users::when($is_super, function ($q) 
        $q->where('id', '!=', $id);
    )->orderBy('id', 'DESC')->get();

    return view('admin.dashboard.manage', $data);

【讨论】:

【参考方案3】:

这解决了我根据https://laravel.com/docs/8.x/queries#where-clauses想要实现的目标

public function vipusers()

    $data['title'] = 'Vip Users';
    $is_super = !auth()->guard('admin')->user()->is_super;

    $data['users'] = Users::when($is_super, function ($q) 
        $q->where('id', '!=', 1)
          ->where('id', '!=', 2)
          ->where('id', '!=', 3);
    )
        ->orderBy('id', 'DESC')->get();

    return view('admin.dashboard.manage', $data);

【讨论】:

以上是关于如何在查询中使用 ID 列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在弹性搜索查询中传递特定字段的值列表

如何在猫鼬中查询多个集合

如何在 django 查询中使用列表 [重复]

如何在 Sangria 中使用 graphql 查询过滤列表响应

java - 如何在java中查询mongoDb时使用Criteria all?

如何在存储过程中创建字符串列表变量以及如何在另一个查询中使用它?