1

here I'd like to find the solution to simplify my query to get data using eloquent in Laravel.

$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();

So here I have 2 Eloquent operations to get Rooms which not included in the Booking Table with specified requirements. So far I have no problem with it, but can you guys give me best practice to simplify from what I do? Thank you.

2 Answers 2

1

Make sure that 'bookings' relation is written on your Room model.

$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();
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, this one solved my problem. But why when I try to use paginate(), it returns an empty array on the next page?
0

Example:

  • With options

protected $with = [ 'product_savour' ];

  • Relationship

public function product_savour() { return $this->hasMany(ProductSavour::class, 'product_id'); }

  • Query
$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']);
                        });
                    });
            });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.