在這里,我想找到解決方案來簡化我的查詢,以便在 Laravel 中使用 eloquent 獲取資料。
$room_id = Booking::whereBetween('from', [$request->from, $request->to])
->orWhereBetween('to', [$request->from, $request->to])
->where('from', '<=', $request->from, )
->where('to', '>=', $request->from)
->pluck('room_id');
$rooms = Room::whereNotIn('id', $room_id )->get();
所以在這里我有 2 個 Eloquent 操作來獲取未包含在具有指定要求的預訂表中的房間。到目前為止,我對此沒有任何問題,但是你們能給我最好的做法來簡化我的作業嗎?謝謝你。
uj5u.com熱心網友回復:
確保“預訂”關系寫在您的房間模型上。
$rooms = Room::whereDoesntHave('bookings', use($request) function($q){
$q->whereBetween('from', [$request->from, $request->to])
$q->orWhereBetween('to', [$request->from, $request->to])
$q->where('from', '<=', $request->from, )
$q->where('to', '>=', $request->from)
})->get();
uj5u.com熱心網友回復:
- 您可以參考 laravel 關系將其添加到模型中,然后使用 whereHas 查詢連接表: https ://laravel.com/docs/9.x/eloquent-relationships
例子:
- 有選項
受保護的 $with = ['product_savour'];
- 關系
公共函式 product_savour() { return $this->hasMany(ProductSavour::class, 'product_id'); }
- 詢問
$productQuery->whereHas('product_savour', function ($query) use ($filters) { $query->whereHas('savour', function ($query) use ($filters) { $query->whereHas('type', function ($query) use ($filters) { $query->whereIn('id', $filters['savour']); }); }); });
uj5u.com熱心網友回復:
您不需要執行連接查詢,因為您已經擁有 room_id,它也存盤在 bookings 表中。我們也不需要檢查房間的退房日期。如果房間在用戶給定的日期范圍內登記入住,則意味著房間不可用。所以只需檢查入住日期。我假設簽入和簽出在您的資料庫中存盤為日期。
$check_in = date($request->from);
$check_out = date($request->to);
$booking=DB::table('bookings')
->where('room_id',$id)
->whereBetween('from',[$check_in,$check_out])
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/490516.html
