使用 whereor 和 wherein Laravel 5.4 对 sql 查询进行项目数组检查

Do Array of items check on sql query using whereor and wherein Laravel 5.4

我有一个 mysql 查询,我需要在其中使用 Or 检查 2 列中的值数组。 简而言之,我有一个数组需要使用 Or 条件检查 2 列。

使用sql

SELECT *
FROM table_name
WHERE col_1 IN (1, 8, 3) 
OR
WHERE col_2 IN (1, 8, 3) 

使用laravel

        $mu = DB::table('users')
        ->join('table_a', 'users.id', '=', 'table_a.user_id')
        ->select('table_a.user_id')
        //This are all AND
        ->where('table_b.search_status','available')
        ->where('table_b.role','<>',2)

        //This 2 parts needs to be in OR clause
        ->whereIn('table_b.lang',$seeks)
        ->whereIn('table_b.lang_2',$seeks)

        //This is AND too
        ->whereIn('table_a.language_id',$lang)
        ->get()->pluck('user_id')->toArray();

我想做类似的事情:

         ->where(function($q) 
        {
            $q->whereIn('table_b.lang',$seeks)
              ->orWhere(whereIn('table_b.lang_2',$seeks));
        })

但给出错误:undefined $seeks.

只需替换为:-

  ->where(function($q) use ($seeks)
    {
        $q->whereIn('table_b.lang',$seeks)
          ->orWhere(whereIn('table_b.lang_2',$seeks));
    });

进入

 ->where(function($q) use ($seeks)
    {
        $q->whereIn('table_b.lang',$seeks)
          ->orWhere(whereIn('table_b.lang_2',$seeks));
    });

使用闭包 where 条件来包装它们。

$mu = DB::table('users')
    ->join('table_a', 'users.id', '=', 'table_a.user_id')
    ->select('table_a.user_id')
    ->where('table_b.search_status', 'available')
    ->where('table_b.role','<>', 2)
    ->where(function ($query) use ($seeks) {
        $query->whereIn('table_b.lang', $seeks)
            ->orWhereIn('table_b.lang_2', $seeks);
    })
    ->whereIn('table_a.language_id', $lang)
    ->get()->pluck('user_id')->toArray();