【问题标题】:How to retrieve the data from Eloquent or raw Query in Laravel?如何从 Laravel 中的 Eloquent 或原始查询中检索数据?
【发布时间】:2019-11-25 11:56:49
【问题描述】:

我需要从 DB Week of the month 和 dates 中检索数据 能够从 MYSQL 查询中获取数据

SELECT cnt, `creationdate`, week, weekname, 
DATE_ADD(firstOfMonth,INTERVAL (week-1) WEEK) as 'Week Start',
 IF(DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY) > eom,
 eom, DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY)) as 'Week End' 
FROM (
 SELECT COUNT(`firstname`) AS 'cnt', `creationdate`, 
FLOOR((DAYOFMONTH(`creationdate`) - 1) / 7 +1) AS week, 
CONCAT('Week ',FLOOR((DAYOFMONTH(`creationdate`) - 1) / 7) +1) AS weekname, DATE_ADD(`creationdate`,interval -DAY(`creationdate`)+1 DAY) AS firstOfMonth, 
LAST_DAY(`creationdate`) as 'eom' 
FROM `UserDetails` WHERE DATE_FORMAT(`creationdate`,'%m/%Y')='06/2017' GROUP BY week ) a

我正在转换为 laravel Raw Query 是

$monthOfWeaks = DB::table("UserDetails")
            ->select(DB::raw('cnt, creationdate, week, weekname,
DATE_ADD(firstOfMonth,INTERVAL (week-1) WEEK) as WeekStart,
DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY) > eom, eom, DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY)) as WeekEnd'))
->select(DB::raw('COUNT(`firstname`) as cnt, creationdate,
 FLOOR((DAYOFMONTH(creationdate) - 1) / 7 +1) as week,
 CONCAT(Week,FLOOR((DAYOFMONTH(creationdate) - 1) / 7) +1) as weekname,
 DATE_ADD(creationdate,interval -DAY(creationdate)+1 DAY) as firstOfMonth,
 LAST_DAY(creationdate) as eom'))
            ->whereRaw("DATE_FORMAT(creationdate,'%m/%Y')='06/2017')")
            ->groupBy(DB::raw("WEEK(creationdate)"))
            ->get();

似乎有些错误,但我无法在 laravel 中修复 请提供一些意见来解决我的问题? 谢谢。

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    你可以使用

    DB::select("
    SELECT cnt, `creationdate`, week, weekname, 
    DATE_ADD(firstOfMonth,INTERVAL (week-1) WEEK) as 'Week Start',
     IF(DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY) > eom,
     eom, DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY)) as 'Week End' 
    FROM (
     SELECT COUNT(`firstname`) AS 'cnt', `creationdate`, 
    FLOOR((DAYOFMONTH(`creationdate`) - 1) / 7 +1) AS week, 
    CONCAT('Week ',FLOOR((DAYOFMONTH(`creationdate`) - 1) / 7) +1) AS weekname, DATE_ADD(`creationdate`,interval -DAY(`creationdate`)+1 DAY) AS firstOfMonth, 
    LAST_DAY(`creationdate`) as 'eom' 
    FROM `UserDetails` WHERE DATE_FORMAT(`creationdate`,'%m/%Y')='06/2017' GROUP BY week ) a
    ");
    

    如果您没有任何参数要添加到来自请求/其他第三方的查询中(因此没有 SQL 注入风险)

    【讨论】:

    • $sql = 'SELECT cnt, creationdate, week, weekname, DATE_ADD(firstOfMonth,INTERVAL (week-1) WEEK) as WeekStart, IF(DATE_ADD(firstOfMonth,INTERVAL ((week-1 )*7+6) DAY) > eom, eom, DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY)) as 'Week End' FROM (SELECT COUNT(firstname) AS cnt, @ 987654325@, FLOOR((DAYOFMONTH(creationdate) - 1) / 7 +1) AS week, CONCAT(Week,FLOOR((DAYOFMONTH(creationdate) - 1) / 7) +1) AS weekname,.. ......'); $results = DB::select($sql);显示更多错误
    • 语法错误,意外的“周”(T_STRING)我无法解决该问题
    • 如果您在数据库上手动运行查询,它工作正常吗?
    • 尝试复制粘贴此代码,如果有错误,请发布整个错误
    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2014-05-20
    • 2018-10-11
    • 2020-02-07
    • 2021-03-22
    • 2019-05-31
    • 2022-08-19
    相关资源
    最近更新 更多