【问题标题】:Laravel Eloquent: I cannot get the id I want, instead I get another one from a joined tableLaravel Eloquent:我无法获得我想要的 id,而是从连接表中获得另一个
【发布时间】:2020-06-01 18:08:30
【问题描述】:

这是我在这里的第一个问题,所以我希望我在第一次尝试时不会搞砸任何事情。

好的,关于手头的主题:我正在尝试在我的控制器中执行一个功能,它允许我从模板中的数据库中获取一些数据,然后使用我传递给它的数据生成一个可下载的 PDF 文件.我设法做到了,而且效果很好。

问题是,我正在使用一个数据库,其中我的所有标识符都命名为“id”,当我尝试访问我想要的那个时,我从连接的表中得到另一个。显而易见的解决方案是更改标识符的名称,因此没有重复的名称,但由于一些外部因素,我不能这样做,至少现在是这样。这是编程无法做到的。

所以,我想知道是否有一种方法可以在不更改数据库的情况下检索我想要的 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>

提前感谢您的帮助!祝你有美好的一天:)

【问题讨论】:

  • 您从哪个表中获取了不正确的项目?
  • 指定字段:-&gt;select('tickets.id as id', 'tickets.name as name', '...')。您可以运行dd($tickets) 来查看其中的内容。
  • @FelippeDuarte 效果很好,非常感谢!
  • 没问题@Dancli 。我写了一个答案,您可以将其标记为已接受,以帮助其他人解决同样的问题。

标签: php laravel eloquent laravel-blade


【解决方案1】:

您可以只指定您需要的字段:

 $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); 以查看变量内部的内容。

【讨论】:

    【解决方案2】:

    所以,看来我只需要别名:

    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');
        }
    

    为 Felipe 在 cmets 中解决这个问题干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2017-05-15
      相关资源
      最近更新 更多