2016-05-26 3 views
1

私はLaravelの助けを借りて簡単な予約システムを作っています。予約された時間は、車を借りる架空の自動車会社のためのものです。だからあなたは時間を予約して車を借りる。私はかなりプロジェクトに入っていて、ほとんど終わりました。私はちょっとした問題があります。私はどのようにして私の予約時間を "予約不可"にすることができるのか分かりません。Laravel 5.2検証ヘルプデータベースに存在

私がユニークにしたいのは、予約の日付です。私の移行では、「予約」の時間(表は「回」と呼ばれている)私はすでに一意であることが、列「日付」を設定しているために:それは一意になるように

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')); 
    }); 
} 

日付「整数」は、それを作ります私はそれを2回予約することはできません。しかし、私がしたいことは、予約された時間が現在の日から10日間の炭素時間枠内にあるかどうかをチェックすることです。当時は、このように構成されています。そして、私は$送る

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

私の見解に変数を遡り、このようにそれらを表示する:

<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> 

私は「ボカ」ボタンを押すと、それでは時間がされます私は関係を使っているので、私は$ 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> 

はカーボンからの日付は私が欲しい「回」の表にあるかどうかを確認することです私の先生は、いくつかの方法でこのコードを使用するように私に語った。..観点から

を「ボカ」ボタンを削除するには:

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

私はこのコードのスニペットが何を知っている、それがあれば送信された要求をチェックそのフォームの日付は列の日付のtimesテーブルに存在します。しかし、私はどこでそれを使うべきか分かりません。アイブ氏は、私はこのような「時間」テーブルに日付を追加私の「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> 

とエラーも出力は言った:「選択した日付が無効です。」 それでは、私の検証コードは、リクエストがデータベースにあるかどうかをチェックし、それがあれば日付が追加されることを確認します。しかし、日付が "times"テーブルにまだない場合は、追加されません。それは私が望んでいるのとまったく反対です。

以前私が示したように、Carbonの助けを借りて日付を作る場所にCarsControllerに入れてみました。しかし、私はそれから何も得ることができません..

私はこの記事がちょっと長いことを知っています。しかし、できるだけ多くの情報を得たいと思っていました。私は本当にいくつかの助けに感謝します。

TL/DR:私は何をしたいの予約のための私の日付は、予約した「回」テーブルまたはないであるかどうかを確認するLaravelに検証機能を使用しています。 IFそれでは"Boka"ボタンを消して欲しいです。日付を「時間」表に追加することはできません。それは「回」の表にある場合、代わりに「日」は、私が実際にそうすることを、私はSOMの助けをいただければ幸いかわからない

...カーボンで作られた日付から完全に消えてしまいます。ありがとう。 ええ、英語は母国語ではありませんので、私をバッシュしないでください。

+0

専用のFormRequestを作成しようとしましたか?下の私の答えをチェックしてください:) –

+0

また、有効な日付形式を検証していますか? –

答えて

0

Laravelでデータを検証する方法はたくさんあります。私はそれらのいくつかをお見せします。あなたが好きなものを自由に選んでください。

まず、基本的なことです。

あなたはあなたの選択のコントローラメソッドでvalidate methodを使用することができます。公式文書には、その良い例があります。

... 

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

... 

この検証ルールは、メソッドの2番目のパラメータであり、他のルールを持つ配列になります。

しかし、これはあなたが検証に対処することができる唯一の方法ではありません。 documentation says in the "Other Validation Approaches"セクションとして

、次のことができます。

  • 手動Validator::make()でバリデータを作成します。
  • 別のクラスであなたの検証ルール(及び、最終的には、ロジック)を単離するFormRequestを作ります。

希望します。 :)

+0

私はドキュメントを見てきました。そして、私は、「存在する」ものについてのコードは、貧しい人々に親切であると思う。私はそれから何を作るのか本当にわからない..私は明らかに日付がテーブル "時"にあるかどうかを確認することができますが、今私はそれが働く方法で... – Addeuz

+0

@Addeuzあなたはまた、フォーマットは大丈夫ですか? –

+0

@Franscescoどういう意味ですか?日付形式をyyyy-mm-ddに設定しても、まったく変わらないのですか? – Addeuz

0

はちょうどそれが真または偽を返し、その使用に基づいている場合、エラーで戻って返したり、さらに進行することがvalidateメソッドの後に確認してください。

関連する問題