Ich mache ein einfaches Buchungssystem mit Hilfe von Laravel. Die Zeiten, die gebucht werden, sind für eine imaginäre Autofirma, die Autos mietet. Sie mieten also ein Auto, indem Sie die Zeit buchen. Ich bin ziemlich weit in das Projekt hinein und bin fast fertig. Ich habe nur ein kleines Problem. Ich weiß nicht, wie ich meine gebuchten Zeiten sozusagen "nicht buchbar" machen kann.Laravel 5.2 Validierung Hilfe existiert in Datenbank
Was ich einzigartig sein möchte, ist das Datum der Buchung. In meiner Migration für die „gebucht“ Zeiten (die Tabelle wird als „Zeit“) Ich habe eingestellt bereits die Spalte „Datum“ eindeutig sein:
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'));
});
}
Das Datum „integer“ macht es so, dass es einzigartig ist und ich kann es nicht zweimal buchen. Aber was ich tun möchte, ist zu überprüfen, ob die gebuchte Zeit im Carbon-Zeitrahmen der zehn Tage vom heutigen Tag liegt. Diese Zeiten wird wie folgt vorgenommen:
$dt = Carbon::now('Europe/Stockholm');
for ($i = 0; $i < 10; $i++) {
$dates[$i] = $dt->addDays(1)->toDateString();
}
Dann schicke ich die $ meiner Ansicht variablen Daten und sie wie folgt angezeigt:
<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>
Also dann, wenn ich die „Boka“ Taste die Zeit ist in die "Zeiten" -Tabelle eingeben, und weil ich die Beziehung verwende, erreiche ich es mit $ car-> time, so kann ich alle gebuchten Zeiten für dieses bestimmte Auto bekommen.
zeige ich alle Zeiten, die wie folgt meiner Ansicht nach ausgebucht sind:
<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>
Also im Grunde, was ich jetzt tun will, ist aus Kohlenstoff, wenn das Datum in der „Zeit“ Tabelle ist zu überprüfen, ich will zu entfernen, mir die „Boka“ -Taste aus der Sicht ..
Mein Lehrer sagt, in irgendeiner Weise den Code zu verwenden:
$this->validate($request, [
'date' => 'exists:times,date'
]);
ich weiß, was dieser Code-snippet ist, er die Anforderung gesendet prüft, ob das Datum aus dem Formular existiert in der Zeittabelle am Datum der Spalte. Aber ich weiß einfach nicht wo ich es benutzen soll. Ive versuchte in meinem „TimesController“, wo ich die Daten in die „Zeit“ Tabelle wie folgt hinzu:
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();
}
Aber das funktioniert nicht so, wie ich es will. Es prüft, ob das Datum in der Tabelle ist, und wenn es ist. Es zeigt es an. Aber das Problem ist, das Datum muss eindeutig sein, so bekomme ich eine Fehlermeldung, dass das Datum nicht eindeutig ist. Das ist gut, aber nicht das, was ich will. Also wenn ich ein noch nicht gebuchtes Datum anlege. Es fügt das Datum nicht so hinzu, wie es sein sollte. Ich überprüfen, welche Fehler ich schreibe diesen Code in meiner Ansicht zu erhalten:
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
und der Fehler es ausgegeben: „Das gewählte Datum ist ungültig.“ Also, was ich davon bekomme, ist, dass mein Validierungscode überprüft, ob die Anfrage in der Datenbank ist. Wenn ja, wird das Datum hinzugefügt. Aber wenn das Datum nicht bereits in der "Zeiten" -Tabelle ist, wird es nicht hinzugefügt. Das ist das genaue Gegenteil von dem, was ich will.
Ich habe versucht, es in meinem CarsController zu setzen, wo ich die Daten mit Hilfe von Carbon zusammensetze, wie ich früher gezeigt habe. Aber ich kann nichts davon bekommen ..
Ich weiß, dass dieser Beitrag ist ein bisschen lang. Aber ich wollte so viele Informationen wie möglich einholen. Ich würde wirklich etwas Hilfe schätzen.
TL/DR: Was ich tun möchte, ist die Validate-Funktion in Laravel zu überprüfen, ob meine Daten für die Buchung in der gebuchten "Zeiten" Tabelle oder nicht ist. IF ist es dann möchte ich die "Boka" Schaltfläche verschwinden. Das Datum sollte nicht zur Tabelle "Zeiten" hinzugefügt werden können. Alternativ könnte das "Datum" vollständig von den Daten verschwinden, die mit Carbon gemacht wurden, wenn es in der "Zeiten" -Tabelle ist ...
Ich weiß wirklich nicht, was ich tun soll, also würde ich mich über som help freuen. Vielen Dank. Und ja, Englisch ist nicht meine Muttersprache, also bitte nicht mich bash.
Haben Sie versucht, ein dediziertes FormRequest zu erstellen? Überprüfen Sie meine Antwort, auf der Unterseite :) –
Überprüfen Sie auch das Datumsformat, um gültig zu sein? –