【问题标题】:How to convert SELECT statement to Eloquent?如何将 SELECT 语句转换为 Eloquent?
【发布时间】:2019-06-01 04:17:21
【问题描述】:

这适用于现有网站,尝试转换为 Laravel 5.8 代码:

SELECT
  DATE_FORMAT(created_at, '%M %Y') AS 'article',
  DATE_FORMAT(created_at, '%m')AS 'm',
  DATE_FORMAT(created_at,'%Y') AS 'y',
  COUNT(id) AS 'total'
FROM posts
GROUP BY DATE_FORMAT(created_at, '%Y%M')
ORDER BY m DESC

我试过了:

$archives = DB::select("SELECT DATE_FORMAT(created_at, '%M %Y') AS 'article',DATE_FORMAT(created_at, '%m')AS 'm', DATE_FORMAT(created_at,'%Y') AS 'y', COUNT(id) AS 'total' FROM posts GROUP BY DATE_FORMAT(created_at, '%Y%M') ORDER BY m DESC");`

我明白了:

错误:SQLSTATE[42000]:语法错误或访问冲突:1055 'amohdb.posts.created_at' 不在 GROUP BY 中(SQL:SELECT DATE_FORMAT(created_at, '%M %Y') AS '文章',DATE_FORMAT(created_at, '%m')AS 'm', DATE_FORMAT(created_at,'%Y') AS 'y', COUNT(id) AS 'total' FROM posts GROUP BY DATE_FORMAT(created_at, '%Y%M') ORDER BY m DESC)

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案1】:

    答案比我想象的要简单得多

    $archives =  Post::select(DB::raw("DATE_FORMAT(created_at, '%M %Y') as article"),
    DB::raw("COUNT(id) as total"))
    ->groupBy('article')
    ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2015-02-24
      • 2018-09-17
      • 2015-08-19
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多