我的下一句是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吗? 有什么帮助吗?
祝你好运
答案 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)
我总是使用这种方式及其工作