【问题标题】:Laravel eloquent nested "WHERE NOT IN" join queryLaravel 雄辩的嵌套“WHERE NOT IN”连接查询
【发布时间】:2017-10-27 20:12:49
【问题描述】:

我在从 SQL 异常中编写适当的 eloquent 查询时遇到问题。我雄辩的查询返回错误。 这是 SQL 异常:

SELECT * FROM `candidate_infos` 
JOIN training_infos on candidate_infos.id = training_infos.candi_id 
where candidate_infos.mdl_id=1
and candidate_infos.id not in ( (SELECT candi_id FROM training_infos WHERE 
candi_id in (1,5,6,8) ))

我试过了:

DB:: table('candidate_infos')
    ->join('training_infos','candidate_infos.id', '=', training_infos.candi_id')
    ->where('candidate_infos.mdl_id', $value->mdl_id)
    ->where('candidate_infos.id', 'not in', select(DB::raw("SELECT candi_id FROM training_infos WHERE candi_id in ($value->cadi_ids)")))
    ->get();

【问题讨论】:

  • 跳过子查询使用AND training_infos.candi_id NOT IN (1,5,6,8)
  • 我们可以看看你的表结构吗?

标签: php laravel laravel-eloquent nested-queries


【解决方案1】:

试试这个,

DB:: table('candidate_infos')
->join('training_infos','candidate_infos.id', '=', 'training_infos.candi_id')
->where('candidate_infos.mdl_id', $value->mdl_id)
->whereNotIn('candidate_infos.id', DB::raw("SELECT candi_id FROM training_infos WHERE candi_id in ($value->cadi_ids)"))
->get();

【讨论】:

    【解决方案2】:

    你应该试试这个:

    $resltQueries = DB::select(DB::raw("SELECT candi_id FROM training_infos WHERE candi_id in ($value->cadi_ids)"));
    $arrQuery = array();
    
    foreach($resltQueries as $key => $resltQuery){
      $arrQuery[$key] = $resltQuery;
    }
    
    DB:: table('candidate_infos')
      ->join('training_infos','candidate_infos.id', '=', 'training_infos.candi_id')
      ->where('candidate_infos.mdl_id', $value->mdl_id)
      ->whereNotIn('candidate_infos.id', $arrQuery)
      ->get();
    

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2020-09-28
      • 2021-09-29
      • 2021-05-29
      • 2020-01-11
      • 2015-06-22
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多