私は車をレンタルできるアプリがあります。車はすでにデータベースに入っています。各オブジェクトをループして空き時間を返します(Laravel)
$table->string('name')->nullable();
$table->string('color')->nullable();
$table->string('model')->nullable();
それは、私はすでに、ユーザーが車や機能の意志ループを要求し、同じrequted車を見つける機能を作成し、私は予約テーブル
$table->increments('id');
$table->dateTime('from_date')->nullable();
$table->dateTime('to_date')->nullable();
を持ってレンタルなので。
car_userは予約された車とユーザーをリンクします。
- 同じ車(A)が再び予約することができません:私は、特に車を要求した(A).Iの日付と時間を節約しようとすると、
$table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); $table->integer('car_id')->unsigned(); $table->foreign('car_id')->references('id')->on('cars');
は今ことを確認する必要があります同じ時に。
- すべての車は同じ時間に利用可能です。車(A)は予約されています。
だから私は、最初の可用性が予約テーブルに存在する場合、この関数は、チェックします
public function isSlotAvailable(Request $request) {
$appointments = Reservation::all();
$from = Carbon::parse($request->from);
$to = Carbon::parse($request->to);
foreach ($appointments as $appointment) {
$eventStart = Carbon::instance(
new DateTime($appointment['dt_start'])
);
$eventEnd = Carbon::instance(
new DateTime($appointment['dt_end'])
)->subSecond(1);
if ($from->between($eventStart, $eventEnd) ||
$to->between($eventStart, $eventEnd) ||
($eventStart->between($from, $to) && $eventEnd->between($from, $to))) {
return false;
}
}
return true;
}
この機能を思い付きました。しかし、それは車を1台の車として扱うので間違っている。たとえば、データベースに5台の車があり、ユーザーが2017-01-05 05:00:00
〜2017-01-10 09:00:00
の車を予約しているとします。すべての車はループが$car->allreservation
のように各車を通過しないので、同じ時間に予約されます。新しい要求された日付が重なっている場合
質問
は、どのようにそれぞれの車の中で私のループとは確認できますか?それが重なると、それは第2の車に行きチェックし、そうでなければそれをユーザにリンクする。
は本当にあなたの助けに感謝
UPDATE
これは私が
$id = $new_car->id;
$Reservation_id = $time->id;
$user->cars()->attach($id, ['type' => 'requested']);
$user->reservations()->attach(Reservation_id);
を参照してください。もっと説明できますか? – leo0019