![](/img/trans.png)
[英]How do I convert raw SQL query into laravel querybuilder or eloquent
[英]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.