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

Laravel中如何传递帖子ID至另一控制器获取对应数据表记录

解决订单提交时无法获取指定帖子ID的问题

这个问题的核心是你没有把当前帖子页面的ID传递到OrdersController的store方法中,而且用Post::all()获取的是所有帖子的集合,自然无法直接访问->id属性。下面分步骤给你解决:

1. 在帖子页面的表单中添加隐藏字段传递帖子ID

你的posts.show视图里,提交订单的表单需要携带当前帖子的ID。因为show方法已经把$post传递到视图了,所以直接在表单里加一个隐藏输入框:

<form action="{{ route('orders.store') }}" method="POST">
    @csrf <!-- 不要忘记CSRF令牌 -->
    
    <!-- 你的其他订单字段,比如date_from输入框 -->
    <input type="date" name="date_from" required>
    
    <!-- 关键:添加隐藏字段传递帖子ID -->
    <input type="hidden" name="post_id" value="{{ $post->id }}">
    
    <button type="submit">提交订单</button>
</form>

2. 修改OrdersController的store方法获取指定帖子

现在请求里已经携带了post_id,你可以用这个ID精准找到对应的帖子,而不是获取所有帖子:

public function store(Request $request) {
    // 先添加验证规则,确保数据有效
    $this->validate($request, [
        'post_id' => 'required|exists:posts,id', // 确保post_id在posts表中存在
        'date_from' => 'required|date' // 根据你的业务需求调整验证规则
    ]);

    // 通过请求中的post_id获取单个帖子模型
    $post = Post::findOrFail($request->input('post_id'));

    $order = new Order;
    $order->client = Auth::user()->name;
    $order->phone = Auth::user()->phone;
    $order->vehicle = $post->id; // 现在$post是单个模型,能正常访问id属性了
    $order->date_from = $request->input('date_from');
    $order->save();

    return redirect('/posts')->with('success', 'Rezervēts');
}

可选方案:通过路由参数传递帖子ID

如果你更倾向于用路由参数传递ID,可以这样做:

第一步:修改路由

在web.php中定义订单提交路由时,加入post_id参数:

Route::post('/orders/{post_id}', [OrdersController::class, 'store'])->name('orders.store');

第二步:修改表单的action

视图里的表单要把帖子ID作为路由参数传递:

<form action="{{ route('orders.store', ['post_id' => $post->id]) }}" method="POST">
    @csrf
    <!-- 其他订单字段 -->
    <button type="submit">提交订单</button>
</form>

第三步:修改store方法参数

直接从路由参数中获取post_id:

public function store(Request $request, $post_id) {
    $this->validate($request, [
        'date_from' => 'required|date'
    ]);

    $post = Post::findOrFail($post_id);

    // 后续订单保存逻辑和之前一致
}

额外提醒

  • 确保用户已经登录:Auth::user()如果为空,访问->name和->phone会报错,你可以在表单页面用@auth指令判断,或者在store方法里添加auth()->check()的判断。
  • 用findOrFail()替代find():如果传递的post_id无效,findOrFail()会直接返回404页面,避免后续代码报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:35:45