У меня есть следующее предложение в чистом виде:
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? Любая помощь?
С наилучшими пожеланиями


Вам необходимо выполнить запрос:
...->groupBy('user_id')->get();
Я думаю, вы можете использовать этот способ. вам не нужно использовать "GroupBy" в контроллере. и код будет таким:
$lastOperationUser = DB::table('policies')
->join('users', 'users.id', '=', 'policies.user_id')
->get();
И если вы хотите сократить последний пост, вы можете сделать это на лезвии (в цикле) например код будет таким:
@forelse($lastOperationUser->reverse()->slice(0, 1) as $content)
Я всегда использую этот простой способ, и его работа
Но мне нужен только пользователь с его новейшей last_operation, чтобы показывать с каждым пользовательскими данными
если вы имеете в виду, что вам просто нужны 1 последние данные, вы не можете добавить больше атрибутов в лезвие, подобное этому @forelse ($ lastOperationUser-> reverse () -> slice (0, 1) as $ content)
Мне нужна связь между двумя таблицами. пользователи и политики. когда я показываю нужные мне данные пользователей, показываю поле lastes last_operation. Это поле находится в таблице политик. Отношения один ко многим. Вы можете проверить модель в моем вопросе
Я думаю, что он будет работать с добавленным -> slice (0, 1) в foreach
Если я сделаю это изменение, я получаю сообщение об ошибке: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 'test.policies.last_operation' не входит в GROUP BY (SQL: выберите
last_operation,user_idиз внутреннего соединенияpoliciesusersнаusers.id=policies.user_id, гдеadmin= 0, группа поuser_id)