Support the ongoing development of Laravel.io →
posted 5 years ago
Laravel

I am beginner in Laravel. I use Laravel 5.8 in my projects.

I have a working code that displays a list of users.

I have this code:

Users:


    class User extends Authenticatable implements MustVerifyEmail
    {
        use Notifiable;
        use psCMS\Presenters\UserPresenter;
    
        public static $roles = [];
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
    
        protected $fillable = ['user_height', 'year_birth', 'company_id', 'enable', 'name', 'surname', 'email', 'email_verified_at', 'password', 'counter', 'url_address', 'isCompany', 'isMailing', 'content', 'nip1', 'business1', 'phone1', 'street1', 'number1', 'postal_code1', 'city1', 'country_id1', 'provincial_id1', 'nip2', 'business2', 'phone2', 'street2', 'number2', 'postal_code2', 'city2', 'country_id2', 'provincial_id2', 'nip3', 'business3', 'phone3', 'street3', 'number3', 'postal_code3', 'city3', 'country_id3', 'provincial_id3', 'cash', 'lng', 'lat', 'enable_map', 'remember_token', 'created_at', 'updated_at', 'last_login_at', 'last_login_ip'];
    
    
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token',
        ];
    
    
        public function roles()
        {
            return $this->belongsToMany('App\Role');
        }
    
        public function mainRole()
        {
            return $this->hasOne('App\Role');
        }
    
        public function comments()
        {
            return $this->hasMany('App\Comments');
        }
    
    
        public function hasRole(array $roles)
        {
    
            foreach ($roles as $role) {
    
                if (isset(self::$roles[$role])) {
                    if (self::$roles[$role]) return true;
    
                } else {
                    self::$roles[$role] = $this->roles()->where('name', $role)->exists();
                    if (self::$roles[$role]) return true;
                }
    
            }
            return false;
        }
    
        public function loginHistory()
        {
            return $this->hasMany('App\UserLoginHistory');
        }
    
        public function companies()
        {
            return $this->belongsTo('App\Companies', 'company_id');
        }
    
    
        public function images()
        {
            return $this->hasManyThrough('App\UploadedFiles', 'App\User', 'id', 'photoable_id');
        }
    
        public function AdminImage()
        {
            return $this->images()->where('photoable_type', '=', 'AdminImage');
        }
    
        public function scopeOfRoleType($query, $types)
        {
            return $query->whereHas('roles', function ($q) use ($types) {
                $q->whereIn('name', $types);
            });
        }
    
    }
    
    
    
    Schema::create('users', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->bigInteger('company_id')->unsigned();
                $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
                $table->boolean('enable')->default(0);
                $table->string('name', 120)->nullable();
                $table->string('surname', 120)->nullable();
                $table->string('email', 120)->unique();
                $table->timestamp('email_verified_at')->nullable();
                $table->string('password');
                $table->bigInteger('counter')->default(0);
                $table->string('url_address', 160);
                $table->boolean('isCompany')->default(0);
                $table->boolean('isMailing')->default(0);
                $table->text('content')->nullable();
                $table->string('nip1', 12)->nullable();
                $table->string('business1', 120)->nullable();
                $table->string('phone1', 60)->nullable();
                $table->string('street1', 150)->nullable();
                $table->string('number1', 8)->nullable();
                $table->string('postal_code1', 12)->nullable();
                $table->string('city1', 100)->nullable();
                $table->bigInteger('country_id1')->default(0);
                $table->bigInteger('provincial_id1')->default(0);
                $table->string('nip2', 12)->nullable();
                $table->string('business2', 120)->nullable();
                $table->string('phone2', 60)->nullable();
                $table->string('street2', 150)->nullable();
                $table->string('number2', 8)->nullable();
                $table->string('postal_code2', 12)->nullable();
                $table->string('city2', 100)->nullable();
                $table->bigInteger('country_id2')->default(0);
                $table->bigInteger('provincial_id2')->default(0);
                $table->string('nip3', 12)->nullable();
                $table->string('business3', 120)->nullable();
                $table->string('phone3', 60)->nullable();
                $table->string('street3', 150)->nullable();
                $table->string('number3', 8)->nullable();
                $table->string('postal_code3', 12)->nullable();
                $table->string('city3', 100)->nullable();
                $table->bigInteger('country_id3')->default(0);
                $table->bigInteger('provincial_id3')->default(0);
                $table->decimal('cash', 9, 2)->default(0);
                $table->decimal('lng', 10, 8)->default(0);
                $table->decimal('lat', 10, 8)->default(0);
                $table->boolean('enable_map')->default(0);
                $table->integer('year_birth')->default(date("Y"));
                $table->integer('user_height')->default(0);
                $table->rememberToken();
                $table->timestamps();
                $table->engine = "InnoDB";
            });

Services:


    class UsersServices extends Model
    {
        protected $quarded = [];
        protected $fillable = ['name', 'type', 'enable'];
        public $timestamps = false;
    }
    
    Schema::create('users_services', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name', 100);
                $table->integer('type');
                $table->boolean('enable')->default(0);
                $table->engine = "InnoDB";
            });

User selected/offer services:


    Schema::create('users_services_selected', function (Blueprint $table) {
                $table->bigInteger('user_id')->unsigned();
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
                $table->bigInteger('service_id')->unsigned();
                $table->foreign('service_id')->references('id')->on('users_services')->onDelete('cascade');
                $table->engine = "InnoDB";
            });
    
    class UserServicesSelected extends Model
    {
        protected $quarded = [];
        protected $fillable = ['user_id', 'service_id'];
        protected $table = 'users_services_selected';
        public $timestamps = false;
    }


Actually i have this function to search user:


    public function getUserList(string $query, string $sortColumn, string $sortMethod)
    {
        if ($query != "" || $sortMethod !="") {  echo "$sortColumn, $sortMethod";
            return User::ofRoleType(['user', 'userPremium', 'userSponsor'])
                ->where(function ($q) use ($query, $sortColumn, $sortMethod) {
                    $q->where('account_paid_for', '>=', date("Y-m-d"))
                        ->where('enable', '=', 1)
                        ->where('email_verified_at', '<>', null)
                        ->orderBy($sortColumn, $sortMethod);
                })->orderBy($sortColumn, $sortMethod)->paginate(15);
        } else {
            return User::ofRoleType(['user', 'userPremium', 'userSponsor'])
                ->where('account_paid_for', '>=', date("Y-m-d"))
                ->where('enable', '=', 1)
                ->where('email_verified_at', '<>', null)
                ->orderBy(DB::raw('IF(premium_for > CURDATE(), 0, 1)'))
                ->orderBy('hits', 'DESC')
                ->paginate(15);

        }
    }

My search form:


    <form method="get" action="{{ route('result') }}">
    Born from <input type="text" name="s_year_birth_from" value=""></div>
    Born to <input type="text" name="s_year_birth_to" value=""></div>
    
    
    User growth:
    Show all: <input type="checkbox" value="0" name="s_height[]">
    150 cm: <input type="checkbox" value="1" name="s_height[]">
    151-160 cm: <input type="checkbox" value="2" name="s_height[]">
    161-170 cm: <input type="checkbox" value="3" name="s_height[]">
    171-180 cm: <input type="checkbox" value="4" name="s_height[]">
    >180 cm: <input type="checkbox" value="5" name="s_height[]">
    
    
    User services:
    Show all services: <input type="checkbox" value="0" name="s_services1[]">
    @foreach($services as $service)
    	{{ $service->name }} <input type="checkbox" value="{{ $service->id }}" name="s_services1[]"> 
    @endforeach
    
    <button type="submit">Search</button>
    </form>

User height (growth) is User->user_height

User year date is User->year_birth

I need to do a new search options:

  1. Displaying users based on age based on form fields: s_year_birth_from and s_year_birth_to (User-> year_birth)

  2. Displaying of searched users offering selected services in the search form (selected / offered user services = UserServicesSelected)

  3. Displaying users based on growth (user height) based on form field: s_height (User->user_height)

How can I extend my current getUserList function with these additional search variants?

Please help :)

Last updated 3 years ago.
0

Sign in to participate in this thread!

PHPverse

Your banner here too?

trifek lukpeta Joined 12 Jun 2019

Moderators

We'd like to thank these amazing companies for supporting us

Your logo here?

Laravel.io

The Laravel portal for problem solving, knowledge sharing and community building.

© 2025 Laravel.io - All rights reserved.