簡體   English   中英

Laravel querybuilder with raw SQL 語句返回語法錯誤

[英]Laravel querybuilder with raw SQL statement returns syntax error

我有這個在 mysql 中完美執行的 SQL 原始查詢,但我想將其轉換為 laravel 查詢構建器。 當我做toSql(); 它返回給我確切的原始查詢。 但是當我get(); 它返回給我一個語法錯誤。

我的原始查詢在 sql 和 laravel 刀片中完美執行


            $items = \DB::select('
            SELECT users.name, users.email, users.phone, users.parent_id, users.section_id, finances.amount, finances.description, schoolyears.name, finances.date 
            from users 
            JOIN finances on users.id = finances.user_id 
            JOIN schoolyears on users.school_id = schoolyears.school_id 
            where finances.date=
            (select max(date) from finances f where finances.user_id=f.user_id)
            ');

將原始 sql 查詢轉換為返回語法錯誤的 querybuilder

 $items = \DB::table('users')
                    ->join('finances', 'users.id','=','finances.user_id')
                    ->join('schoolyears', 'users.school_id','=','schoolyears.school_id')
                    ->select('users.name as uname','users.email','users.phone','users.section_id','finances.amount','finances.description','schoolyears.name','finances.date')
                    ->where('finances.date', '=' ,(\DB::raw("select max(`date`) from finances f where finances.user_id=f.user_id")))
                    ->get();

錯誤代碼

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in 
your SQL syntax; check the manual that corresponds to your MariaDB server 
version for the right syntax to use near 'select max(`date`) from finances f 
where finances.user_id=f.user_id' at line 1 (SQL: select `users`.`name` as 
`uname`, `users`.`email`, `users`.`phone`, `users`.`section_id`, 
`finances`.`amount`, `finances`.`description`, `schoolyears`.`name`, 
`finances`.`date` from `users` inner join `finances` on `users`.`id` = 
`finances`.`user_id` inner join `schoolyears` on `users`.`school_id` = 
`schoolyears`.`school_id` where `finances`.`date` = select max(`date`) from 
finances f where finances.user_id=f.user_id)

試試這個:原始查詢中缺少括號,所以它給出了錯誤。

->where('finances.date', '=' ,(\DB::raw("(select max(`date`) from finances f where finances.user_id=f.user_id)")))

前任。

$items = \DB::table('users')
                    ->join('finances', 'users.id','=','finances.user_id')
                    ->join('schoolyears', 'users.school_id','=','schoolyears.school_id')
                    ->select('users.name as uname','users.email','users.phone','users.section_id','finances.amount','finances.description','schoolyears.name','finances.date')
                    ->where('finances.date', '=' ,(\DB::raw("(select max(`date`) from finances f where finances.user_id=f.user_id)")))

嘗試以下操作:

 $items = \DB::table('users')
                    ->join('finances', 'users.id','=','finances.user_id')
                    ->join('schoolyears', 'users.school_id','=','schoolyears.school_id')
                    ->select('users.name as uname','users.email','users.phone','users.section_id','finances.amount','finances.description','schoolyears.name','finances.date')
                    ->where('finances.date', '=' ,"(" . (\DB::raw("select max(`date`) from finances f where finances.user_id=f.user_id")) . ")")
                    ->get()->toArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM