Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 尝试将原始sql转换为laravel查询生成器时出错_Mysql_Laravel_Laravel Query Builder - Fatal编程技术网

Mysql 尝试将原始sql转换为laravel查询生成器时出错

Mysql 尝试将原始sql转换为laravel查询生成器时出错,mysql,laravel,laravel-query-builder,Mysql,Laravel,Laravel Query Builder,我试图将这个非常长的原始sql转换为laravel查询生成器,但遇到了一个错误 这是原始sql sql = "select d.doc_Code,d.seq,p.seq2,d.product_code,d.name_t,d.dwg_file,p.book,concat(p.book,'-',p.seq) as job_book,h.sale_code,h.sale_name,h.ref_code,h.ref_name,h.priority,p.code,p.in_time,wt_date,p.

我试图将这个非常长的原始sql转换为laravel查询生成器,但遇到了一个错误

这是原始sql

 sql = "select d.doc_Code,d.seq,p.seq2,d.product_code,d.name_t,d.dwg_file,p.book,concat(p.book,'-',p.seq) as job_book,h.sale_code,h.sale_name,h.ref_code,h.ref_name,h.priority,p.code,p.in_time,wt_date,p.job_status,d.status,DATEDIFF(now(),p.in_time) as gdays,DATEDIFF(h.due_date,now()) as gdue_days,h.due_date,h.start_date as start_datex from jt_p as p inner join jt_d as d on (p.doc_code=d.doc_code and p.book=d.book and p.seq=d.seq and p.in_time is not null and p.wt_date is null and p.job_status not in('Z','C') and p.code<>'M' and d.status <>'C') inner join jt_h as h on(h.doc_code =p.doc_code and h.book=p.book)"
这是错误消息:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'not in ("Z","C") and `jt_p`.`code` != ? and `jt_d`.`status` != ?' at line 1 (SQL: select `jt_d`.`doc_code`, `jt_d`.`seq`, `jt_p`.`seq2`, `jt_d`.`product_code`, `jt_d`.`name_t`, `jt_d`.`dwg_file`, `jt_p`.`book`, `jt_h`.`sale_code`, `jt_h`.`sale_name`, `jt_h`.`ref_code`, `jt_h`.`ref_name`, `jt_h`.`priority`, `jt_p`.`code`, `jt_p`.`in_time`, `jt_p`.`wt_time`, `jt_p`.`job_status`, `jt_d`.`status`, DATEDIFF(now(),jt_p.in_time) as gdays, DATEDIFF(jt_h.due_date,now()) as gdue_days, `jt_h`.`due_date`, `jt_h`.`start_date` as `start_datex` from `jt_p` inner join `jt_d` on `jt_p`.`doc_code` = `jt_d`.`doc_code` and `jt_p`.`book` = `jt_d`.`book` and `jt_p`.`seq` = `jt_d`.`seq` inner join `jt_h` on `jt_h`.`doc_code` = `jt_p`.`doc_code` and `jt_p`.`book` = `jt_h`.`book` where `jt_p`.`in_time` != and `jt_p`.`wt_time` = and `jt_p`.`job_status` = not in ("Z","C") and `jt_p`.`code` != M and `jt_d`.`status` != C)

更改这行代码

->where('jt_p.job_status',DB::raw('not in ("Z","C")'))

您还需要使用IsNull IsNotNull

$jt_p = DB::table('jt_p')
        ->join('jt_d', function($join){
            $join->on('jt_p.doc_code', '=', 'jt_d.doc_code');
            $join->on('jt_p.book','=','jt_d.book');
            $join->on('jt_p.seq','=','jt_d.seq');
        })
        ->whereNotNull('jt_p.in_time')
        ->whereNull('jt_p.wt_time')
        ->whereNotIn('jt_p.job_status',["Z","C"])
        ->where('jt_p.code','!=','M')
        ->where('jt_d.status','!=','C')
        ->join('jt_h', function($join){
            $join->on('jt_h.doc_code', '=', 'jt_p.doc_code');
            $join->on('jt_p.book','=','jt_h.book');
        })
        ->select('jt_d.doc_code','jt_d.seq','jt_p.seq2','jt_d.product_code','jt_d.name_t','jt_d.dwg_file','jt_p.book',
        'jt_h.sale_code','jt_h.sale_name','jt_h.ref_code','jt_h.ref_name','jt_h.priority','jt_p.code','jt_p.in_time','jt_p.wt_time',
        'jt_p.job_status','jt_d.status',DB::raw("DATEDIFF(now(),jt_p.in_time) as gdays"),
        DB::raw("DATEDIFF(jt_h.due_date,now()) as gdue_days"),
        'jt_h.due_date','jt_h.start_date as start_datex')
        ->get();

 return $jt_p;

为什么不使用Laravel的内置whereNotIn?是的,它可以工作,但不知何故它返回一个空数组。您知道与原始sql相比,查询有什么问题吗?不是空的,而且!=这两个是不同的things@QiYang更新了我的答案,在他们的places@QiYang如果aswer有助于解决您的问题,请将其标记为答案,以供子孙后代参考
->whereNotIn('jt_p.job_status',["Z","C"])
$jt_p = DB::table('jt_p')
        ->join('jt_d', function($join){
            $join->on('jt_p.doc_code', '=', 'jt_d.doc_code');
            $join->on('jt_p.book','=','jt_d.book');
            $join->on('jt_p.seq','=','jt_d.seq');
        })
        ->whereNotNull('jt_p.in_time')
        ->whereNull('jt_p.wt_time')
        ->whereNotIn('jt_p.job_status',["Z","C"])
        ->where('jt_p.code','!=','M')
        ->where('jt_d.status','!=','C')
        ->join('jt_h', function($join){
            $join->on('jt_h.doc_code', '=', 'jt_p.doc_code');
            $join->on('jt_p.book','=','jt_h.book');
        })
        ->select('jt_d.doc_code','jt_d.seq','jt_p.seq2','jt_d.product_code','jt_d.name_t','jt_d.dwg_file','jt_p.book',
        'jt_h.sale_code','jt_h.sale_name','jt_h.ref_code','jt_h.ref_name','jt_h.priority','jt_p.code','jt_p.in_time','jt_p.wt_time',
        'jt_p.job_status','jt_d.status',DB::raw("DATEDIFF(now(),jt_p.in_time) as gdays"),
        DB::raw("DATEDIFF(jt_h.due_date,now()) as gdue_days"),
        'jt_h.due_date','jt_h.start_date as start_datex')
        ->get();

 return $jt_p;