我有一个简单的查询,其中$ clubs和$ user_ids是数组。我想在同一个查询中使用两个WhereIn。例如$ clubs = array(1,2,3)和$ user_id = array(25,30,40)。并且在DB中有一个条目,因为这个user_id = 25并且对应的club_id = 1.我想从查询结果中列出user_id = 25。
$query = \DB::table('users_clubs')
->WhereIn('user_id', $user_ids)
->WhereIn('club_id',$clubs)
->lists('user_id');
答案 0 :(得分:1)
这是以某种方式在核心中的whereIn的代码
public function whereIn($column, $values, $boolean = 'and', $not = false)
{
$type = $not ? 'NotIn' : 'In';
// ... irrelevant code omitted ...
$this->wheres[] = compact('type', 'column', 'values', 'boolean');
$this->addBinding($values, 'where');
return $this;
}
似乎不可能直接,但如果你能以某种方式覆盖它,它可能会有所帮助。
另一种方法是使用advance where
DB::table('users_clubs')
->Where(function($query)
{
foreach( $user_ids as $user_id ){
$query->where('user_id', '=', $user_id);
}
})
->Where(function($query)
{
foreach( $clubs as $club){
$query->where('club_id', '=', $club);
}
})
->get();
未对其进行测试,但似乎可能会进行一些修改。
答案 1 :(得分:1)
whereIn()
。在WhereIn()
添加get()
后lists()
例如试试这个
$query = \DB::table('users_clubs')
->WhereIn('user_id', $user_ids)
->WhereIn('club_id',$clubs)
->get()
->lists('user_id');