Search code examples
mysqllaravelmodel

make a query with conditions in laravel


i wanna get the reservations that their status aren't canceled or if status is canceled it check they have unread messages or not

Can you help me?

class Reservation extends Model
{
  public function unreadMessages() {
      return $this->hasMany(Message::class, 'reservation_id', 'id')
               ->where('read', 0);
  }
}


Solution

  • use where callback method

    Reservation::where(function ($query) {
            $query->where('status','!=','canceled')
                ->orWhere(function ($query){
                    $query->where('status','canceled')->whereHas('unreadMessages');
                });
        })->get();