首页 > 解决方案 > Laravel:检查数据库中是否存在记录

问题描述

所以我目前在我的系统上进行了验证,它将检查之前是否输入了两个日期。如果他们有用户不能继续结帐,如果他们有不同的日期,他们可以继续。但是我遇到的问题是,此验证适用于任何酒店,并且应该只针对他们预订的一家酒店。

例如,如果在 2019 年 4 月 18 日预订了一号酒店,而我想在同一天预订二号酒店,则验证不会让我退房,因为日期相同。这是不正确的,即使日期相同,它也应该让我通过不同的酒店。

我现在想继续检查是否选择了相同的酒店和相同的日期,如果它们相同,则我们无法继续。下面的函数用于我的验证:

public function getCheckout(Request $request)
{
    if (!Session::has('cart')) {
        return view('shop.shopping-cart');
    }
    //$post = Post::find($id);
    $oldCart = Session::get('cart');
    $cart = new Cart($oldCart);
    $total = $cart->totalPrice;
    $checkIn = $request->input('checkIn');
    $checkOut = $request->input('checkOut');

    $post = Order::where('checkIn', '=', $checkIn)
        ->where('checkOut', '=', $checkOut)
        ->get();

    if (count($post) > 1) {
        return redirect()->route('posts.shopping-cart')->with('Sorry this date has been taken');
    } else {
        return view('posts.checkout', ['total' => $total, 'checkIn' => $checkIn, 'checkOut' =>
            $checkOut]);

    }
}

现在的问题是我也没有传递酒店 $id。下面的函数最初将我的 $id 添加到购物车中,我如何准确地将 $id 添加到“getCheckout”函数中并验证它?

public function getAddToCart(Request $request, $id)
{
    $post = Post::find($id);
    $cart = Session::has('cart') ? Session::get('cart') : null;
    if (!$cart) {
        $cart = new Cart($cart);
    }
    $cart->add($post, $post->id);
    Session::put('cart', $cart);
    // dd($request->session()->get('cart'));
    return redirect()->route('posts.index');
}

如果有人可以提供帮助,那就太好了。我只需要将酒店 ID 输入我的支票并检查酒店、入住和退房日期是否都匹配

标签: laravelvalidation

解决方案


我无法从代码中看出您的路线是什么样的,但目前在我看来,最简单的做法是getCheckout像这样修改您的路线:

Route::post('checkout/{hotelId}', 'CheckoutController@getCheckout');

然后在您的方法中,您可以像这样获取它:

public function getCheckout(Request $request, $hotelId)
{
    ...
}

从您的表单调用路由(如果您正在执行 POST 请求)当然必须进行修改,以便它包含您需要的 ID,如下所示:

<form action="{{ route('checkout', $hotelId) }}" method="POST">

推荐阅读