【问题标题】:Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$leave_type_name in Laravel未定义的属性:Laravel 中的 Illuminate\Database\Eloquent\Relations\BelongsTo::$leave_type_name
【发布时间】:2020-11-23 13:09:55
【问题描述】:

在我的 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 类型有两个字段: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"

我该如何解决?

谢谢

【问题讨论】:

  • 你通过调用$leaverequest->leavetype()方法得到查询生成器,你需要用$leaverequest->leavetype调用关系结果所以$leaverequest->leavetype->leave_type_name

标签: laravel


【解决方案1】:

尝试以下方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2020-01-26
    • 2020-05-04
    • 2020-01-29
    • 2021-09-23
    • 2018-11-19
    • 2020-07-08
    • 2021-03-12
    相关资源
    最近更新 更多