Неопределенное свойство: Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ leave_type_name в Laravel - PullRequest
0 голосов
/ 03 августа 2020

В моих проектах 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 (автоинкремент) и leave_type_name (varchar)

id | 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')

При отправке я получил следующую ошибку:

# сообщение: "Неопределенное свойство: Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ leave_type_name "

Как решить эту проблему?

Спасибо

1 Ответ

2 голосов
/ 03 августа 2020

Попробуйте следующее:

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

Примечание: лучше использовать эти строки «Annual» и «Annual Leave» в качестве констант или перечислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...