Конструктор запросов - laravel

Подставьте la siguiente consulta:

public function getChartOperator(Request $request)
    {   
        $anio = date('Y');
        $month = date('m');

        $ordenes = DB::table('orders as o')        
            ->select(DB::raw('MONTHNAME(o.date) as mes'),
                    DB::raw('YEAR(o.date) as anio'),    
                    DB::raw('(o.status) as estado'),
                    DB::raw('(o.user_id) as user_id'),                
                    DB::raw('COUNT(*) as total'))     

        ->whereYear('o.date', $anio)
        ->whereMonth('o.date', $month)
        ->where('o.status', 'TERMINADO')       


        ->groupBy(DB::raw('MONTHNAME(o.date)'),DB::raw('(o.status)'),DB::raw('YEAR(o.date)'),DB::raw('(o.user_id)'))
        ->get();    

        return ['estados' => $ordenes, 'anio' => $anio];             
    }

obtengo este resultado

{
"estados": [
{
"mes": "diciembre",
"anio": 2019,
"estado": "TERMINADO",
"user_id": 4,
"total": 2
},
{
"mes": "diciembre",
"anio": 2019,
"estado": "TERMINADO",
"user_id": 6,
"total": 1
},
{
"mes": "diciembre",
"anio": 2019,
"estado": "TERMINADO",
"user_id": 7,
"total": 1
}
],
"anio": "2019"
}

lo que prentendo mostrar es el nombre de usuario y никакой el user_id, пользователи este nombre se encuentra en la tabla y su бразильская саванна es имя, entonces ¿como puedo relacionar имя Эль-Кампо que pertenece а-ля пользователи таблицы подставляет ми consulta фактический? y asi obtener el nombre del usuario

Заказы таблицы ми Esta es:

orders

2
задан 20.12.2019, 19:07
1 ответ

Ты можешь делать это таким образом:

Выбор 1

  • Использует метод join, чтобы производить связь между таблицей orders и таблицей users
  • , однажды Сделанным предыдущее, использует другой метод select, чтобы выбирать имя пользователя
  • Считает изменять твою консультацию в Eloquent, он сделал бы ее более простой со связями и более легкой для того, чтобы быть прочитанным и для того, чтобы

быть поддержанными Код

public function getChartOperator(Request $request)
    {   
        $anio = date('Y');
        $month = date('m');

        $ordenes = DB::table('orders as o')   
            ->select('users.name')  /*aqui el nuevo select*/   
            ->select(DB::raw('MONTHNAME(o.date) as mes'),
                    DB::raw('YEAR(o.date) as anio'),    
                    DB::raw('(o.status) as estado'),
                    DB::raw('(o.user_id) as user_id'),                
                    DB::raw('COUNT(*) as total'))     
        ->join('users', 'users.id', '=', 'orders.user_id') /*aquí el join*/
        ->whereYear('o.date', $anio)
        ->whereMonth('o.date', $month)
        ->where('o.status', 'TERMINADO')       


        ->groupBy(DB::raw('MONTHNAME(o.date)'),DB::raw('(o.status)'),DB::raw('YEAR(o.date)'),DB::raw('(o.user_id)'))
        ->get();    

        return ['estados' => $ordenes, 'anio' => $anio];             
    }

Выбор 2

  • Для этого выбора ты будешь должен считать созданной по крайней мере модель Order
  • Считай, что, если ты работаешь с Laravel, тем же самым, уже приносит Уголь , библиотеку для управления дат
  • , Чтобы получать настоящий год он гораздо проще таким образом: now()->year
  • , Чтобы получать только число настоящего месяца, ты делаешь это таким: now()->month

Оставаясь таким:

$anio = now()->year;
$month = now()->month;

$ordenes = Order::selectRaw('users.name, 
                            MONTHNAME(orders.date) AS Mes,
                            YEAR(orders.date) AS Anio,
                            orders.status AS Estado,
                            orders.user_id AS user_id,
                            COUNT(*) AS Total')
            ->join('users', 'users.id', '=', 'orders.user_id')
            ->whereYear('orders.date', $anio)
            ->whereMonth('orders.date', $month)
            ->where('orders.status', 'TERMINADO')
            ->groupBy(DB::raw('MONTHNAME(o.date)'),DB::raw('(o.status)'),DB::raw('YEAR(o.date)'),DB::raw('(o.user_id)'))
            ->get();
0
ответ дан 21.12.2019, 12:12
  • 1
    я тестирую то, что ты показал мне, получаю эту ошибку: "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'orders.user_id' in 'on clause' (SQL: select MONTHNAME(o.date) as mes, YEAR(o.date) as anio, (o.status) as estado, (o.user_id) as user_id, COUNT(*) as total from `orders` as `o` inner join `users` on `users`.`id` = `orders`.`user_id` where year(`o`.`date`) = 2019 and month(`o`.`date`) = 12 and `o`.`status` = TERMINADO group by MONTHNAME(o.date), (o.status), YEAR(o.date), (o.user_id)) ◀" – Rodrigo Ruiz 20.12.2019, 19:46
  • 2
    ok я манипулирую выбором 1 вижу и спрашиваю, что он был бы должен делать другими $ordenes = DB::table('orders as o') ->select('users.name') /*aqui el nuevo select*/, но в этом случае с users я говорю об этом: $usuarios = DB::table('users as u') ? – Rodrigo Ruiz 20.12.2019, 20:09
  • 3
    В моей секунде opció n проверь modificació n переместили меня деталь в кавычках @RodrigoRuiz – Aprendiz 20.12.2019, 20:38

Теги

Похожие вопросы