首页 文章

Laravel 5.2验证帮助存在于数据库中

提问于
浏览
1

我在Laravel的帮助下制作了一个简单的预订系统 . 预订的时间是租来汽车的想象中的汽车公司 . 所以你通过预订时间租车 . 我离项目很远,我差不多完成了 . 我只是有一个小问题 . 我不知道如何让我预订的时间“不可预订”这么说 .

我想要的独特之处是预订日期 . 在我的“预订”时间的迁移中(该表称为“时间”)我已经将列“日期”设置为唯一:

public function up()
{
    Schema::create('times', function (Blueprint $table) {
        $table->integer('car_id')->unsigned();
        $table->date('date');
        $table->timestamps();
        $table->primary(array('car_id', 'date'));
    });
}

日期“整数”使它成为唯一的,我不能预订两次 . 但我想做的是检查预订的时间是否在现在的十天的碳时间范围内 . 这些时间是这样的:

$dt = Carbon::now('Europe/Stockholm');
for ($i = 0; $i < 10; $i++) {
    $dates[$i] = $dt->addDays(1)->toDateString();
}

然后我将$ dates变量发送到我的视图并显示如下:

<ul class="list-group">
    @foreach ($dates as $date)
        <form method="POST" action="/{{ $car->id }}/time">
            {{ csrf_field() }}
            <li class="list-group-item">
                <input type="hidden" name="date" value="{{ $date }}">
                {{ $date }}
                <input type="submit" value="Boka" class="btn btn-primary"/>
            </li>
        </form>
    @endforeach
</ul>

那么如果我按下“Boka”按钮,时间会被放入“时间”表中,因为我使用了关系,我用$ car-> time来达到它,就像我可以获得该特定汽车的所有预订时间一样 .

我在我的视图中显示了这样预订的所有时间:

<ul class="list-group">
    @foreach ($car->time as $time)
        <li class="list-group-item">
            {{ $time->date }}
            <form method="POST" action="/delete/time/{{ $time->car_id }}/{{ $time->date }}">
                {{ method_field('DELETE') }}
                {{ csrf_field() }}
                <input type="submit" value="Delete" class="btn btn-danger"/>
            </form>
        </li>
    @endforeach
</ul>

基本上我现在要做的就是检查Carbon的日期是否在“时间”表中我想要从视图中删除“Boka”按钮 .

我的老师告诉我以某种方式使用这段代码:

$this->validate($request, [
    'date' => 'exists:times,date' 
]);

我知道这段代码的作用,如果表格中的日期存在于列日期的时间表中,它会检查发送的请求 . 但我只是不知道在哪里使用它 . 我试过在我的“TimesController”中,我将日期添加到“时间”表中,如下所示:

public function update(Request $request, Car $car, Time $time) {

    $this->validate($request, [
        'date' => 'exists:times,date' 
    ]);

    $times = new Time;
    $times->date = $request->date;
    $car->time()->save($times);

    return back();
}

但这并不像我想要的那样有效 . 它检查日期是否在表中,如果是 . 它广告它 . 但问题是,日期必须是唯一的,因此我收到一条错误消息,指出日期不是唯一的 . 这很好,但不是我想要的 . 所以,如果我添加一个尚未预订的日期 . 它没有像它应该添加日期 . 我通过在我的视图中编写此代码来检查我得到的错误:

<ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
</ul>

它输出的错误说:“所选日期无效 . ”所以我得到的是我的验证代码检查请求是否在数据库中,如果是,则添加日期 . 但是如果日期不在“时间”表中,则不会添加 . 这与我想要的完全相反 .

我尝试将它放在我的CarsController中,我在前面展示的Carbon的帮助下编制了日期 . 但我无法从中得到任何东西..

我知道这篇文章有点长 . 但我想尽可能多地获取信息 . 我真的很感激一些帮助 .

TL / DR:我想要做的是使用Laravel中的Validate功能来检查我的预订日期是否在预订的"times"表中 . IF 然后我想 "Boka" 按钮确实消失了 . 日期不应该添加到"times"表中 . 或者,"date"可能完全从使用Carbon制作的日期消失,如果它在"times"表中...

我真的不知道该怎么做所以我会感谢som的帮助 . 谢谢 . 是的,英语不是我的母语,所以请不要打击我 .

2 回答

  • 0

    只需在验证方法之后检查,如果它返回true或false并且基于该使用返回错误或继续进行 .

  • 0

    有许多方法可以在Laravel中验证您的数据 . 我会告诉你一些,随意选择你喜欢的那个 .

    首先,基础知识 .

    您可以在您选择的控制器方法中使用validate method . 官方文档有一个很好的例子 .

    ...
    
    public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);
    
    ...
    

    您的验证规则包含在方法的第二个参数中,该数组包含其他规则 .

    但是,这不是处理验证的唯一方法 .

    作为documentation says in the "Other Validation Approaches"部分,您可以:

    • Validator::make() 手动创建验证器;

    • 使 FormRequest 将您的验证规则(以及最终的逻辑)隔离在一个单独的类中;

    希望能帮助到你 . :)

相关问题