I have a polymorphic relation where class (Request) can have a relationship with either class (Leave) or class (Overtime).
Each object of class (Request) belongs to a user.
I would like to setup a relationship in the User class to directly get all of their Leave or Overtime objects.
Here is how the code looks:
- Class Request with:
- user_id
- requestable_id
- requestable_type can be App\Leave or App\Overtime
class Request extends Model
{
public function requestable() {
return $this->morphTo();
}
public function user() {
return $this->belongsTo('App\User');
}
}
- Class Leave
class Leave extends Model
{
public function request() {
return $this->morphOne('App\Request', 'requestable');
}
}
- Class Overtime
class Overtime extends Model
{
public function request() {
return $this->morphOne('App\Request', 'requestable');
}
}
- Class User
class User extends Authenticatable
{
public function requests() {
return $this->hasMany(Request::class);
}
public function leaves() {
// Need help here
}
public function overtimes() {
// And here
}
}
What I would like to do is get all leaves and overtimes a user has, so ultimately I should be able to do this:
$userLeaves = $user->leaves;
$userOvertimes = $user->overtimes;