объединить 2 коллекции в другую с одним и тем же значением в обоих laravel - PullRequest
0 голосов
/ 18 января 2020

Привет, у меня есть 2 объекта в laravel, как показано ниже:

{
user_id: 34993,
price: "20000.00"
},
{
user_id: 35153,
price: "20000.00"
},
{
user_id: 35168,
price: "20000.00"
},

и вторым объектом является пользовательский объект:

[
{
id: 34993,
uuid: "8f8f2ba3-0d51-4fdb-83cd-6e13a0f2cc13",
fullname: "َUsersName",
email: null,
created_at: "2020-01-15 14:42:45",
updated_at: "2020-01-15 14:43:58",
email_verified_at: null,
gender: 2,
title: null
},
{
id: 35153,
uuid: "8f8f2ba3-0d51-4fdb-83cd-6e13a0f2cc13",
fullname: "َUsersName",
email: null,
created_at: "2020-01-15 14:42:45",
updated_at: "2020-01-15 14:43:58",
email_verified_at: null,
gender: 2,
title: null
},
{
id: 35168,
uuid: "8f8f2ba3-0d51-4fdb-83cd-6e13a0f2cc13",
fullname: "َUsersName",
email: null,
created_at: "2020-01-15 14:42:45",
updated_at: "2020-01-15 14:43:58",
email_verified_at: null,
gender: 2,
title: null
},

, так что теперь, как я могу добавить цену в объект пользователя во втором объекте или как-то, как объединить их с ключом user_id в первом объекте и идентификатором объекта secound, потому что они одинаковы ?? мой код как показано ниже:

    {

        $data = DB::table('users_tracker')->where('user_id','>','34676')->where('action','LIKE','%gatewayResponse%')
            ->leftJoin('gateway_transactions',function($join){
                $join->on('gateway_transactions.ip','=','users_tracker.ip');
            })
            ->where('gateway_transactions.status','=','SUCCEED')
            ->select('user_id','price')
            ->distinct()
            ->get();
//        return $data;

       $user_id = $data->pluck('user_id');
        $users = User::whereIn('id',$user_id)->get();
        return $users;
    }

1 Ответ

1 голос
/ 18 января 2020

Используйте от User до join user_tracker, например:

    User::join('users_tracker', 'users_tracker.user_id', '=', 'users.id')
              ->where('users_tracker.user_id','>','34676')
              ->where('users_tracker.action','LIKE','%gatewayResponse%')
              ->leftJoin('gateway_transactions',function($join){
                $join->on('gateway_transactions.ip','=','users_tracker.ip');
               })
              ->where('gateway_transactions.status','=','SUCCEED')
              ->select('*', 'users_tracker.user_id', 'gateway_transactions.price')
              ->groupBy('users_tracker.user_id', 'gateway_transactions.price')
              ->get();

Кажется, у вас проблема only_full_group_by.

Установите sql_mode в вашей конфигурации / базе данных. php

'mysql' => [
  ...
   'modes' => [
       'STRICT_ALL_TABLES',
       'ERROR_FOR_DIVISION_BY_ZERO',
       'NO_ZERO_DATE',
       'NO_ZERO_IN_DATE',
       'NO_AUTO_CREATE_USER',
   ],
 ];

Не забудьте очистить кеш конфигурации:

php artisan config:clear
php artisan optimize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...