我已编写此文件并将其作为原始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中使用YEAR
,MONTH
和MAX
。
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
")
);
答案 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();
如果上述代码有任何问题,请随时询问。