首页 > 解决方案 > 在创建视图中保存数据后如何生成pdf

问题描述

我正在使用 barryvdh/dompdf 包装器来打印和保存 PDF,当我在将数据插入数据库后尝试“打印”时,它不会将上次保存的数据提取到 PDF。

我尝试通过获取最后保存的 id 来获取数据,但仍然没有运气。

主视图的打印按钮:

<a href="{!! url('printPDF') !!}" target="_blank" class="btn btn-info">Print</a>

控制器:

 public function printPDF(Request $request)
    {
        $visID = MyModel::orderBy('id', 'DESC')->pluck('id')->first();
        $exi= $visID;
        $pdf = PDF::loadView('pdfview', compact('exi'));
        return $pdf->stream();
    }

pdf查看:

<table>
    <tr>
        <th>First Name:</th>
        <td>{{ $exi['first_name'] }}</td>
    </tr>
    <tr>
        <th>Last Name:</th>
        <td>{{ $exi['last_name'] }}</td>
    </tr>
    <tr>
</table>

在打印预览中仅获取“名字:”和“姓氏:”。

标签: laraveleloquentdompdf

解决方案


您有几个问题可以改进。第一个是,如果您希望获得一个对象集合但只使用 的方法first(),它只会给您一个实例。使用pluck进一步的化合物,因为它不会给你整个对象,而只是id你的示例代码中的一个字段():

$visID = MyModel::orderBy('id', 'DESC')->pluck('id')->first();

我建议您更改上述内容以获取完整模型。如果您的数据库具有支持它的字段,请删除pluck,添加:latest()created_at

$exi = MyModel::latest()->first();

或者,你走在了正确的轨道上,并且也可以使用 orderBy 来做到这一点(Laravellatest()只是同一件事的语法糖 - 看起来很整洁):

$exi = MyModel::orderBy('id', 'DESC')->first();

然后,而不是:

$exi= $visID;

您已经在上面的查询行的变量中拥有了最后一个模型。在通过刀片后,您拥有其中的所有数据$exi并且可以使用您希望的对象表示法:

<tr>
     <th>First Name:</th>
     <td>{{ $exi->first_name }}</td>
</tr>
// etc

推荐阅读