将原始查询转换为laravel雄辩

时间:2018-11-27 15:38:44

标签: laravel eloquent laravel-query-builder

我已编写此文件并将其作为原始SQL查询工作,但我试图将其转换为更具Laravel雄辩的/查询构建器设计,而不仅仅是原始查询。

我的表结构如下:

Table One (Name model)
______________
| id  | name |
|------------|
| 1   | bob  |
| 2   | jane |
--------------

Table Two (Date Model)
_________________________________
| id  | table_1_id | date       |
|-------------------------------|
| 1   | 1          | 2000-01-01 |
| 2   | 1          | 2000-01-31 |
| 4   | 1          | 2000-02-28 |
| 5   | 1          | 2000-03-03 |
| 6   | 2          | 2000-01-03 |
| 7   | 2          | 2000-01-05 |
---------------------------------

我只返回与表1(名称模型)中的用户bob相匹配的表2(日期模型)中的最高(最新)日期。

例如,在上面的示例中,我从查询中返回了

  

2000-01-31

     

2000-02-28

     

2000-03-03

这是我现在正在做的(有效),但是我不确定如何在laravel中使用YEARMONTHMAX

DB::select(
  DB::raw("
    SELECT MAX(date) as max_date
    FROM table_2
    INNER JOIN table_1 ON table_1.id = table_2.table_1_id
    WHERE table_1.name = 'bob'
    GROUP BY YEAR(date), MONTH(date)
    ORDER BY max_date DESC
  ")
);

1 个答案:

答案 0 :(得分:0)

如果有任何问题,请尝试此代码,

DB::table('table_1')->join('table_2', 'table_1.id','=','table_2.table_1_id')
    ->select(DB::raw('MAX(date) as max_date'),DB::raw('YEAR(date) year, MONTH(date) month'),'table_1.name')
    ->where('name','bob')
    ->groupBy('year','month')
    ->orderBy('max_date')
    ->get();

如果上述代码有任何问题,请随时询问。