Join two Models using Eloquent in laravel 5.3

11,738

You can make a new Model as 'Admin' that is related to users table and use relationships like this:

users model:

class Users extends Model
{
    protected $table = 'users';
    public $timestamps = false;
    protected $fillable = ['name','phone','email','codeMeli','admin'];


    public function userAdmin()
    {
        return $this->belongsToMany('App\Admin', 'user_admin', 'adminid', 'userid');
    }
}

Admin model:

class Admin extends Model
{
    protected $table = 'users';
    public $timestamps = false;
    protected $fillable = ['name','phone','email','codeMeli','admin'];
    public function userAdmin()
    {
        return $this->belongsToMany('App\Users', 'user_admin', 'userid', 'adminid');
    }
}

and in your Controller:

$user = Users::find($CurrentUSerID)->userAdmin()->get();

Take a look at https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

Share:
11,738
Admin
Author by

Admin

Updated on June 23, 2022

Comments

  • Admin
    Admin over 1 year

    I have two tables.

    users table:

     id (integer)
     name (string)
     email (string)
     phone (string)
     codeMeli (string)
    

    and user_admin table:

    userId (integer)
    adminId (integer)
    

    Note: adminid field keeps the user id that is admin of another user. And a user can be admin of multiple users or a user might have more than one admin. For example:

    | id | name | email | phone | codeMeli |            | userid | adminid |
     ---- ------ ------- ------- ----------              -------- ---------
    | 5  | mike | m@yaho| 12345 | 12345678 |            |   6    |    5    |
    | 6  | sara | s@yaho| 54321 | 87654321 |            |   7    |    5    |
    | 7  | joe  | j@yaho| 56421 | 65875234 |            |   7    |    8    |
    | 8  | sag  | s@yaho| 57635 | 64616843 |
    

    I tried this query using OueryBuilder and works well:

    Users::select('id','name','email','codeMeli','phone')
           ->join('user_admin','user_admin.userid','=','users.id')
           ->whereRaw("name LIKE '%".$name."%' and email LIKE '%".$email."%' and codeMeli LIKE '%".$codeMeli."%' and phone LIKE '%".$phone."%' and user_admin.adminid=".$CurrentUSerID)
           ->get();
    

    But I want to use Eloquent.

    And this is My user Model:

    <?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    
    class Users extends Model
    {
        protected $table = 'users';
        public $timestamps = false;
        protected $fillable = ['name','phone','email','codeMeli','admin'];
    
        public function userAdmin()
        {
            return $this->belongsToMany('App\UserAdmin','id','userid');
        }
    }
    

    and user_admin Model:

    <?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    
    class UserAdmin extends Model
    {
        protected $table = 'user_admin';
        public $timestamps = false;
        protected $fillable = ['userid','adminid'];
    
        public function users()
        {
           return $this->belongsToMany('App\Users','id','adminid');
        }
    }
    

    How should I write this query using Eloquent? Am I using relationships in a correct method in Models? I think my Models should be edited but I don't know how. Thanks for your help.