Конструктор запросов Laravel с 2 таблицами

У меня есть следующее предложение в чистом виде:

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? Любая помощь?

С наилучшими пожеланиями

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
2 313
2

Ответы 2

Вам необходимо выполнить запрос:

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

Если я сделаю это изменение, я получаю сообщение об ошибке: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1055 'test.policies.last_operation' не входит в GROUP BY (SQL: выберите last_operation, user_id из внутреннего соединения policiesusers на users. id = policies.user_id, где admin = 0, группа по user_id)

user3892232 11.04.2018 18:38

Я думаю, вы можете использовать этот способ. вам не нужно использовать "GroupBy" в контроллере. и код будет таким:

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

И если вы хотите сократить последний пост, вы можете сделать это на лезвии (в цикле) например код будет таким:

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

Я всегда использую этот простой способ, и его работа

Но мне нужен только пользователь с его новейшей last_operation, чтобы показывать с каждым пользовательскими данными

user3892232 11.04.2018 19:46

если вы имеете в виду, что вам просто нужны 1 последние данные, вы не можете добавить больше атрибутов в лезвие, подобное этому @forelse ($ lastOperationUser-> reverse () -> slice (0, 1) as $ content)

rzlrz 11.04.2018 19:50

Мне нужна связь между двумя таблицами. пользователи и политики. когда я показываю нужные мне данные пользователей, показываю поле lastes last_operation. Это поле находится в таблице политик. Отношения один ко многим. Вы можете проверить модель в моем вопросе

user3892232 11.04.2018 19:52

Я думаю, что он будет работать с добавленным -> slice (0, 1) в foreach

rzlrz 11.04.2018 19:55

Другие вопросы по теме