将原始查询转换为 laravel eloquent
Convert raw query into laravel eloquent
我写了这篇文章并作为原始 SQL 查询使用,但我正在尝试将其转换为更多 Laravel eloquent / 查询构建器设计,而不仅仅是原始查询查询。
我的 table 结构是这样的:
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 |
---------------------------------
我 return 仅 table 2(日期模型)中与 table 1(名称模型)中的用户 bob 相匹配的最高(最新)日期。
例如,在上面的示例中,我 return 来自我的查询
2000-01-31
2000-02-28
2000-03-03
这是我现在正在做的事情(有效),但我不确定如何将 YEAR
、MONTH
和 MAX
与 laravel 一起使用.
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
")
);
如果有任何问题,请尝试此代码,
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();
如果以上代码有任何问题,请随时询问。
我写了这篇文章并作为原始 SQL 查询使用,但我正在尝试将其转换为更多 Laravel eloquent / 查询构建器设计,而不仅仅是原始查询查询。
我的 table 结构是这样的:
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 |
---------------------------------
我 return 仅 table 2(日期模型)中与 table 1(名称模型)中的用户 bob 相匹配的最高(最新)日期。
例如,在上面的示例中,我 return 来自我的查询
2000-01-31
2000-02-28
2000-03-03
这是我现在正在做的事情(有效),但我不确定如何将 YEAR
、MONTH
和 MAX
与 laravel 一起使用.
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
")
);
如果有任何问题,请尝试此代码,
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();
如果以上代码有任何问题,请随时询问。