【问题标题】:laravel 5, where clause with multiple valueslaravel 5,具有多个值的 where 子句
【发布时间】:2016-01-04 23:48:31
【问题描述】:

我想将所有 $id 值传递给 where 子句,即下面代码的第 3 行。但当我试图返回 $friend 它是空的。我是否错误地处理了 $id 值?还是我在查询中弄错了?我检查了我的数据库,它应该返回 2 行。

我还通过返回它检查了 $id,它返回了我所期望的,我猜我在 $friend 行的查询中弄错了。

$x = user->id;  

$id = DB::table('requests')->select('id')->where('id', '=', $x)->get();

$friend = DB::table('users')->where('id', 'in', $id)->get();

【问题讨论】:

    标签: laravel where-clause


    【解决方案1】:

    您可以在一个查询中完成所有操作:

    $friends = DB::table('users')->whereIn('id', function ($query) use ($user) {
        $query->select('id')->from('requests')->where('id', $user->id);
    })->get();
    

    【讨论】:

    • 我相信这仍然是 2 个查询,只是嵌套。
    • @YasenSlavov - 不。这是一个子查询:select * from users where id in (select id from requests where id = ?)
    • 这就是我的意思。但在性能方面,它们仍被视为单独的查询。
    • 不。有一个巨大的差异。这是对数据库的一次访问。
    【解决方案2】:

    你想要的是whereIn(向下滚动一点)。也可以使用whereNotIn

    $userIds = [1, 2, 3];
    $friend = DB::table('users')->whereIn('id', $userIds)->get();
    

    whereNotIn:

    $userIds = [1, 2, 3];
    $friend = DB::table('users')->whereIn('id', $userIds)->get();
    

    查看 Laravel 查询构建器支持的所有可能的高级 where 子句。

    【讨论】:

      【解决方案3】:

      您需要使用whereIn(),也许整个交易的更好选择是:

      $ids = DB::table('requests')->where('id', $x)->lists('id');
      $friend = DB::table('users')->whereIn('id', $ids)->get();
      

      注意 whereIn() 的第二个参数需要是一个数组。

      【讨论】:

      • 谢谢老兄。这对我很有帮助。
      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2018-09-05
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2017-11-15
      相关资源
      最近更新 更多