2015-10-07 35 views
1

我想将所有$ id值传递给where子句,下面代码的第3行。但正如我试图返回$朋友它是空的。我是否正确地处理$ id值?或者我在查询中遇到了错误?我检查了我的数据库,它应该返回2行。laravel 5,where子句中有多个值

我也通过返回它来检查$ id,它返回我期待的内容,我想我在$ friend行的查询中出错了。

$x = user->id; 

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

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

回答

4

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

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

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

+0

thnx老兄。这真的帮助了我。 – mrbrightside

+0

没问题,哥们。 –

0

你可以做到这一切在一个单一的查询:

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

我相信这仍然是2个查询,只是嵌套。 –

+0

@YasenSlavov - 没有。这是一个子查询:'select * from id where in(select id from request where id =?)' –

+0

这就是我的意思。但是他们仍然被视为性能明智的单独查询。 –

0

你想要的是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查询生成器支持的条款。