Laravel POST 路由返回 HTTP 代码 200 但没有创建记录

Posted

技术标签:

【中文标题】Laravel POST 路由返回 HTTP 代码 200 但没有创建记录【英文标题】:Laravel POST route returns HTTP code 200 but no record is created 【发布时间】:2021-06-27 09:59:56 【问题描述】:

我创建了一个 Laravel API 端点 api/post/offer,它将在其中创建一个帖子。 使用邮递员的邮寄请求。 postman post request

然后会访问api.php处的路由

Route::post('post/offer', [PostController::class, 'create_offer_post'])->name('create_offer_post');

在我的 PostController 中使用 create_offer_post 方法

public function create_offer_post(Request $request) 

        //validate data
        $request->validate([
            'email' => ['required', 'email', 'max:50'],
            'postIdentity' => ['required', 'max:100'],
            'postStatus' => ['required', 'max:50'],
            'deliveryArea' => ['required', 'max:500'],
            'shoppingPlace' => ['required', 'max:2000'],
            'deliverySchedule' => ['required', 'date'],
            'transportMode' => ['required', 'max:200'],
            'capacity' => ['required', 'max:100'],
            'paymentMethod' => ['required', 'max:200'],
            'caption' => ['required', 'max:200'],
            'isLoggedIn' => ['required', 'boolean']
        ]);

        dd($request->all());

        // if logged in create offer post
        if($request->isLoggedIn) 
            DB::transaction(function () 

                $post = new Post;
                $post->email = $request->email;
                $post->postIdentity = $request->postIdentity;
                $post->postStatus = $request->postStatus;
                $post->save();

                $offer_post = new OfferPost;
                $offer_post->postStatus = $request->postStatus;
                $offer_post->deliveryArea = $request->deliveryArea;
                $offer_post->shoppingPlace = $request->shoppingPlace;
                $offer_post->deliverySchedule = $request->deliverySchedule;
                $offer_post->transportMode = $request->transportMode;
                $offer_post->capacity = $request->capacity;
                $offer_post->paymentMethod = $request->paymentMethod;
                $offer_post->caption = $offer_post->caption;
                $post->offer_post()->save($offer_post);
            );

            return response()->json(['message' => 'Offer post successfully created.'], 201);
        
        else 

            return response->json(['error' => 'You are not logged in.'], 401);
        
    

它验证请求。然后它应该将帖子保存在数据库中。 我的问题是每当我在邮递员中发送请求时。它发送一个 200 响应代码。我期待 201 或 401 响应代码。但我收到 200 响应代码,并且数据库中没有保存新记录。 dd() 也不工作

【问题讨论】:

可能你错过了一些你在模型中使用的属性,匹配属性而不是你也可以使用的,资源丰富的 API 模式laravel.com/docs/8.x/eloquent-resources 【参考方案1】:

您已经启动了数据库事务,但您没有提交它以将数据保存在数据库中。也许是这个错误背后的原因。

【讨论】:

【参考方案2】:

看起来我的验证码不起作用并返回 200。同时我删除了验证。

【讨论】:

【参考方案3】:

尝试在邮递员中使用原始数据而不是表单数据。

【讨论】:

是我的请求格式错误。我还需要设置 Accept header = application/json.【参考方案4】:

请检查表单数据中是否缺少参数[必需]。这就是为什么没有在您的数据库中创建数据的原因

【讨论】:

【参考方案5】:
dd($request->all());

此行转储数据并退出。您的代码的下一行将不会运行。

【讨论】:

以上是关于Laravel POST 路由返回 HTTP 代码 200 但没有创建记录的主要内容,如果未能解决你的问题,请参考以下文章

laravel 路由回调返回控制器

Laravel 网络路由变量未按预期返回

在 Laravel 8 中使用 API 路由时返回错误

POST 路由未从根路径 Laravel 5.2 中列出

Laravel 5 GET 正在工作,但 POST 方法不起作用

Laravel 在路由不存在时返回 MethodNotAllowedHttpException