Laravel Eloquent: я не могу получить нужный идентификатор, вместо этого я получаю другой из объединенной таблицы - PullRequest
0 голосов
/ 17 февраля 2020

Это мой первый вопрос здесь, поэтому я надеюсь, что ничего не испортил с первой попытки.

Хорошо, к топике c в руке: я пытаюсь выполнить функцию в мой контроллер, который позволяет мне получать некоторые данные из моей базы данных в шаблоне, а затем генерировать загружаемый файл PDF с данными, которые я передавал ему. Мне удалось это сделать, и это прекрасно работает.

Что не так, я использую базу данных, где все мои идентификаторы называются «id», и когда я пытаюсь получить доступ к тому, который я хочу, я получаю другой из объединенных таблиц. Очевидным решением было бы изменение имени идентификаторов, поэтому дублированных имен нет, но из-за некоторых внешних факторов я не могу этого сделать, по крайней мере, на данный момент. Это то, что программирование не может сделать.

Итак, мне было интересно, есть ли способ получить идентификатор, который я хочу, без изменения базы данных.

Это моя функция:

public function descargarPDF(Request $request)
    {
        $fecha1 = $request->get('fecha1');
        $fecha2 = $request->get('fecha2');
        $categoria = $request->get('categoria');
        // These are filters I had to apply before fetching data to my PDF file, they work fine.
        $tickets = DB::table('tickets')
        -> join('detalle_tickets', 'tickets.detalle_ticket_id', '=', 'detalle_tickets.id')
        -> join('users', 'detalle_tickets.user_id', '=', 'users.id')
        -> join('areas', 'detalle_tickets.area_id', '=', 'areas.id')
        -> where('tickets.estado' ,'=', $categoria) 
        -> whereBetween('tickets.created_at', [$fecha1, $fecha2]) 
        -> get();
        $pdf = PDF::loadView('/admin/pdf', compact('tickets'));
        return $pdf->download('tickets.pdf');
    }

А это мой шаблон лезвия:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PDF</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>Código</th>
                <th>Nombre</th>
                <th>Email</th>
                <th>Empresa</th>
                <th>Requerimiento</th>
                <th>Estado</th>
            </tr>
        </thead>
        <tbody>
            @foreach($tickets as $value)
            <tr>
                <td>{{ $value->id }}</td>
                <td>{{ $value->name }}</td>
                <td>{{ $value->email }}</td>
                <td>{{ $value->empresa }}</td>
                <td>{{ $value->nombre }}</td>
                <td>{{ $value->estado }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
</body>
</html>

Заранее спасибо за помощь! Хорошего дня:)

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Итак, похоже, все, что мне было нужно, это псевдонимы:

public function descargarPDF(Request $request)
    {
        $fecha1 = $request->get('fecha1');
        $fecha2 = $request->get('fecha2');
        $categoria = $request->get('categoria');
        $tickets = DB::table('tickets')
        -> join('detalle_tickets', 'tickets.detalle_ticket_id', '=', 'detalle_tickets.id')
        -> join('users', 'detalle_tickets.user_id', '=', 'users.id')
        -> join('areas', 'detalle_tickets.area_id', '=', 'areas.id')
        -> select ('tickets.id as id_ticket',
                   'users.name as nombre',
                   'users.email as email',
                   'users.empresa as empresa',
                   'areas.nombre as requerimiento',
                   'tickets.estado as estado')
        -> where('tickets.estado' ,'=', $categoria) 
        -> whereBetween('tickets.created_at', [$fecha1, $fecha2]) 
        -> get();
        $pdf = PDF::loadView('/admin/pdf', compact('tickets'));
        return $pdf->download('tickets.pdf');
    }

Приветствую Фелипе за решение этого в комментариях!

0 голосов
/ 17 февраля 2020

Вы можете указать только те поля, которые вам нужны:

 $tickets = DB::table('tickets')
    ->select('tickets.id as id', 'tickets.name as name', '...')
    -> join('detalle_tickets', 'tickets.detalle_ticket_id', '=', 'detalle_tickets.id')
    -> join('users', 'detalle_tickets.user_id', '=', 'users.id')
    -> join('areas', 'detalle_tickets.area_id', '=', 'areas.id')
    -> where('tickets.estado' ,'=', $categoria) 
    -> whereBetween('tickets.created_at', [$fecha1, $fecha2]) 
    -> get();

Чтобы получить больше информации, используйте xdebug или напишите dd($tickets);, чтобы увидеть, что находится внутри переменной.

...