Iverson
Iverson

Reputation: 179

Laravel 5.1 Eloquent Relationship

Is there anyone can suggest from the eloquent relationship that I have based on the screenshot and model setup? enter image description here

Model setup:

class Leaves extends Model
{
   protected $table = 'leaves';

    protected $fillable = [
        'leave_type',
        'user_id'
    ];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

}

class LeaveType extends Model
{
    protected $table = 'leave_type';

    protected $fillable = ['type_name'];
}

class User extends Model implements AuthenticatableContract,
                                    AuthorizableContract,
                                    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword;

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'password'];

    protected $hidden = ['password', 'remember_token'];

    public function leave()
    {
        return $this->hasMany('App\Leaves');
    }

}

Currently I only able to get the leaves detail but need to retrieve the leave_type's type_name based on

$user = User::oldest('name')->get();
foreach ($users as $user) {
     $user->leave()-get();

}

Upvotes: 1

Views: 127

Answers (2)

Andrei C
Andrei C

Reputation: 812

in your Leave model you would have

function type() {
    return $this->hasOne(App\LeaveType);
}

in your LeaveType you should reciprocate

function leave() {
    return $this->belongsToMany(App\LeaveType);
}

and in your controller:

$user = User::oldest('name')->with('leave', 'leave.type')->get();
dd($user->leave->type);

Upvotes: 1

Peter Kota
Peter Kota

Reputation: 8340

Leaves model:

class Leaves extends Model {
   protected $table = 'leaves';

    protected $fillable = [
        'leave_type',
        'user_id'
    ];

    public function User()
    {
        return $this->belongsTo('App\User');
    }
    public function LeaveType()
    {
        return $this->belongsTo('App\LeaveType');
    }

}

LeavesType model:

class LeaveType extends Model {
    protected $table = 'leave_type';

    protected $fillable = ['type_name'];
    public function Leaves()
    {
        return $this->hasMany('App\Leaves');
    }
}

User model:

class User extends Model implements AuthenticatableContract,
                                    AuthorizableContract,
                                    CanResetPasswordContract
{
    use Authenticatable, Authorizable, CanResetPassword;

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'password'];

    protected $hidden = ['password', 'remember_token'];

    public function Leaves()
    {
        return $this->hasMany('App\Leaves');
    }

}

Upvotes: 0

Related Questions