You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何将Eloquent查询的Post数据传递给DomPDF视图?

问题解决:Laravel后端无法正确接收前端传递的帖子ID数组

核心问题

前端直接通过axios发送纯ID数组时,Laravel的$request->all()无法正确解析到数组数据,导致Post::find($payload)查询不到结果,最终视图中$posts为空。

解决方案

方案一:前端修改请求格式(推荐)

将ID数组包裹在一个对象中发送,给数组指定一个键名,让Laravel可以通过键名直接获取数组:

let payload = posts.map((obj) => obj.id);

this.$axios
    .post(`pdf_posts`, { post_ids: payload }) // 将数组放入对象的post_ids键中
    .then((response) => {
        window.open(response.request.responseURL);
    })
    .catch((error) => {});

后端对应修改为通过键名获取参数:

public function generatePostsPdf(Request $request)
{
    $payload = $request->input('post_ids'); // 直接获取post_ids对应的数组
    $posts = Post::find($payload);

    $data = [
      'posts' => $posts,
    ];

    $pdf = Pdf::loadView('pdf_posts', $data);
    return $pdf->stream("pdf_posts.pdf");
}

方案二:后端修改参数获取方式(无需改动前端)

如果不想修改前端代码,后端可以直接解析请求的JSON原始数据来获取数组:

public function generatePostsPdf(Request $request)
{
    $payload = $request->json()->all(); // 解析请求体中的JSON数组
    $posts = Post::find($payload);

    $data = [
      'posts' => $posts,
    ];

    $pdf = Pdf::loadView('pdf_posts', $data);
    return $pdf->stream("pdf_posts.pdf");
}

原因说明

axios默认以application/json格式发送请求,当直接发送纯数组时,Laravel的$request->all()方法是用于解析表单键值对数据(application/x-www-form-urlencoded格式),无法正确识别纯JSON数组。此时要么前端将数组包装成键值对结构,要么后端通过$request->json()方法直接解析JSON请求体,才能拿到正确的ID数组进行查询。

内容的提问来源于stack exchange,提问作者jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:21:24