我只想知道如何将该查询转换为laravel雄辩的查询。
"SELECT * FROM vw_part_supplier
LEFT JOIN purchase_request_detail ON vw_part_supplier.part_supp_id = purchase_request_detail.prd_part_supp_id
WHERE (
part_status = 'ACTIVE'
AND part_supp_id not IN (SELECT prd_part_supp_id FROM purchase_request_detail WHERE prd_pr_id = $id)
AND part_supp_supplier_id = (SELECT pr_supplier_id FROM purchase_request WHERE pr_id = $id)
AND part_prod_grp_id = (SELECT pr_prod_grp_id FROM purchase_request WHERE pr_id = $id)
AND part_supp_ratio!=0)
ORDER BY part_name,part_code,part_subcode";
我已经完成了该部分,但是直到直到IN为止。 任何帮助都将不胜感激。谢谢!
答案 0 :(得分:0)
我相信您已经尝试并到达了目的地,这很棘手,但是我也相信您可以为自己的答案进行更多搜索。
无论如何,我将按照相同的心态为您解决一条问题:
AND part_supp_id not IN (SELECT prd_part_supp_id FROM purchase_request_detail WHERE prd_pr_id = $id)
我认为您在这里遇到的问题是嵌套选择,这就是为什么它阻止了您。
->whereNotIn('part_supp_id', function ($query) use($id) {
$query->from("purchase_request_detail")
->where("prd_pr_id", $id)
->select("prd_part_supp_id");
})
答案 1 :(得分:0)
我已经解决了这个问题。
public function getAvailPartsList($pr_id = 0){
$ids = $this->model
->select('pr_supplier_id','pr_prod_grp_id')
->from('purchase_request')
->where('pr_id','=',$pr_id)
->get();
$pr_supplier_id = $ids[0]['pr_supplier_id'];
$pr_prod_grp_id = $ids[0]['pr_prod_grp_id'];
$result = $this->model->select('*')
->from('vw_part_supplier')
->leftJoin('purchase_request_detail', 'vw_part_supplier.part_supp_id','=','purchase_request_detail.prd_part_supp_id')
->where('vw_part_supplier.part_status', '=', 'ACTIVE')
->whereNotIn('vw_part_supplier.part_supp_id', function ($y) use ($pr_id){
$y->select('prd_part_supp_id')
->from('purchase_request_detail')
->where('prd_pr_id', '=', $pr_id);
})
->where('vw_part_supplier.part_supp_supplier_id', '=', $pr_supplier_id)
->where('vw_part_supplier.part_prod_grp_id', '=', $pr_prod_grp_id)
->where('part_supp_ratio','!=',0)
->get();
return $result;
}
无论如何都要感谢您的答复。