【发布时间】:2016-09-24 16:17:38
【问题描述】:
我正在 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'));
});
}
日期“整数”使它独一无二,我不能预订两次。但我想做的是检查预订的时间是否在从今天起十天的 Carbon 时间范围内。那些时间是这样的:
$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”按钮,时间就会放在“times”表中,因为我使用关系,所以我使用 $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'
]);
我知道这段 sn-p 代码的作用,它会检查表单中的日期是否存在于时间表中日期列上的请求中。但我只是不知道在哪里使用它。我已经尝试在我的“TimesController”中将日期添加到“times”表中,如下所示:
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 中的验证功能来检查我的预订日期是否在预订的“时间”表中。 IF 那么我希望 “Boka” 按钮消失。日期不应添加到“时间”表中。或者,如果“日期”在“时间”表中,则“日期”可能会完全从使用 Carbon 制作的日期中消失......
我真的不知道该怎么做,所以我会很感激 som 帮助。谢谢。 是的,英语不是我的母语,所以请不要抨击我。
【问题讨论】:
-
您是否尝试过创建专用的FormRequest?检查我的答案,在底部:)
-
另外,您是否正在验证日期格式是否有效?
标签: database validation laravel blade