Laravel Query Builder有2个表

时间:2018-04-11 15:37:19

标签: sql laravel eloquent query-builder

我的下一句是raw:

SELECT last_operation FROM policies
        INNER JOIN(users) 
        ON (policies.user_id=users.id)
        group by (user_id);

工作正常。但是当我转录到查询构建器时,nodt会抛出任何错误,但结果并不好:

$lastOperationUser = DB::table('policies')
                  ->join('users', 'users.id', '=', 'policies.user_id')
                  ->select('last_operation','user_id')
                  ->groupBy('user_id');

我有“一对多”的关系。

一个用户可能拥有无限数量的策略,但一个策略只能属于一个用户。

在这句话中,我尝试通过“last_operation”字段(类型数据字段)获取每个用户的最新策略的数组。

USERS         POLICIES
id            id
name          last_operation
              id_user               

如果我执行dd($ lastOperationUser);我得到了:

         Builder {#552 ▼
            +connection: MySqlConnection {#219 ▶}
            +grammar: MySqlGrammar {#220 ▶}
            +processor: MySqlProcessor {#221}
            +bindings: array:6 [▶]
            +aggregate: null
             +columns: array:2 [▶]
             +distinct: false
             +from: "policies"
             +joins: array:1 [▶]
             +wheres: array:1 [▶]
             +groups: array:1 [▶]
             +havings: null
             +orders: null
             +limit: null
             +offset: null
             +unions: null
             +unionLimit: null
             +unionOffset: null
             +unionOrders: null
             +lock: null
             +operators: array:29 [▶]
             +useWritePdo: false
           }

我可以使用Eloquent吗? 有什么帮助吗?

祝你好运

2 个答案:

答案 0 :(得分:0)

您必须执行查询:

...->groupBy('user_id')->get();

答案 1 :(得分:0)

我认为你可以用这种方式。你不必在控制器中使用“GroupBy”。 代码就像:

$lastOperationUser = DB::table('policies')
                  ->join('users', 'users.id', '=', 'policies.user_id')
                  ->get();

如果您想通过最新帖子缩短,可以在刀片上执行此操作(在循环中) 例如代码就像:

@forelse($lastOperationUser->reverse()->slice(0, 1) as $content)

我总是使用这种方式及其工作