首页 > 解决方案 > 未定义的属性:Laravel 中的 Illuminate\Database\Eloquent\Relations\BelongsTo::$leave_type_name

问题描述

在我的 Laravel-5.8 项目中,我有两个模型:HrLeaveType 和 HrLeaveRequest

模型:

class HrLeaveType extends Model
{
    protected $table = 'hr_leave_types';

    protected $fillable = [
                  'leave_type_name',
                  'no_of_days',
                  'leave_type_code',
              ];


    public function leaverequest(){
        return $this->hasMany('App\Models\Hr\HrLeaveRequest');
    }  
}



class HrLeaveRequest extends Model
{

    protected $table = 'hr_leave_requests';

    protected $primaryKey = 'id';

    protected $fillable = [
                  'id',
                  'employee_id',
                  'department_id',
                   'leave_type_id',
                  'reason',
                  'line_manager_comment',
              ];


    public function leavetype()
    {
        return $this->belongsTo('App\Models\Hr\HrLeaveType','leave_type_id');
    }
}

员工提出多个休假请求。

如果休假类型是年假或年假或年假,则申请应遵循以下控制器中的条件。但问题是,我们不能说年假的 leave_type_id 为 1。

HrLeave Type 有两个字段:id (auto-increment) 和 leave_type_name (varchar)

编号 | leave_type_name

1 | 年假

2 | 产假

3 | 病假

但可能不是这个顺序

控制器

      public function leave_request_approve(Request $request, $id)
      {
         $leaverequest               = HrLeaveRequest::find($id);

        if ($leaverequest->leavetype()->leave_type_name == 'Annual' || $leaverequest->leavetype()->leave_type_name == 'Annual Leave')
        {                                    
            $leaverequest->line_manager_comment    = $request->line_manager_comment;
            $leaverequest->save();
                  
            HrEmployee::where('user_id', $leaverequest->employee_id)->update([
                'on_leave' => 1
            ]);                                                         
            
        }
    }

由于用户无法确定年假是否携带 leave_type_id 为 1,而不是

 if ($leaverequest->leave_type_id == 1)

我用了

if ($leaverequest->leavetype()->leave_type_name == 'Annual' || $leaverequest->leavetype()->leave_type_name == 'Annual Leave')

当我提交时,我收到了这个错误:

#message:“未定义的属性:Illuminate\Database\Eloquent\Relations\BelongsTo::$leave_type_name”

我该如何解决?

谢谢

标签: laravel

解决方案


尝试以下操作:

$leaveType = $leaverequest->leavetype;
if ($leaveType && ($leaveType->leave_type_name == 'Annual' || $leaveType->leave_type_name == 'Annual Leave'))

旁注:最好将这些字符串“Annual”和“Annual Leave”作为常量或枚举。


推荐阅读