将原始查询转换为 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

这是我现在正在做的事情(有效),但我不确定如何将 YEARMONTHMAX 与 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();

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