Laravel - Как создать уникальное правило для динамических c полей ввода - PullRequest
0 голосов
/ 28 марта 2020

В моем приложении Laravel -5.8 я разрабатываю поле ввода динамического c. Это включает две таблицы:

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

  protected $primaryKey = 'id';
  protected $fillable = [
              'company_id',
              'leave_type_name',
              'number_of_days',
              'leave_type_code',
          ];

  protected $dates = [];
  protected $casts = [];

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


class HrLeaveTypeDetail extends Model
{
  public $timestamps = false;
  protected $table = 'hr_leave_type_details';
  protected $primaryKey = 'id';
  protected $fillable = [
              'leave_type_id',
               'company_id',
              'employment_type_id',
              'no_of_days',
          ];

  protected $casts = [
   'data' => 'array',
  ];

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

  public function employmenttype()
  {
    return $this->belongsTo('App\Models\Hr\HrEmploymentType');
  }    
}

Две модели используются для полей ввода Dynami c. HrLeaveType является основной моделью. Это один ко многим. Один LeaveType имеет много LeaveTypeDetail. LeaveTypeDetail находится в полях массива.

Я создал это RequestRule:

class StoreLeaveTypeRequest extends FormRequest
{
  public function rules()
  {
    return [
        'leave_type_name' => [
             'required', 
             'string',
             'min:5',
             'max:100',                 
            Rule::unique('leave_types')->where(function ($query) {
           return $query->where('leave_type_name', $this->leave_type_name)
              ->where('company_id', $this->company_id);
        })                
        ],     
        'leave_type_code' => [
             'nullable', 
             'string',
             'min:3',
             'max:20',                 
            Rule::unique('leave_types')->where(function ($query) {
           return $query->where('leave_type_code', $this->leave_type_code)
              ->where('company_id', $this->company_id);
        })                
        ],                      

        'number_of_days'            => 'required|numeric|min:0|max:500',           

        'employment_type_id'           => 'required|array',
        'employment_type_id.*'         => 'required',                      

    ];
  }   
}

Поле в HrLeaveDetail, creation_type_id уникально по отношению к оставляемому идентификатору_представления и идентификатору компании.

От что у меня выше в правилах:

        'leave_type_name' => [
             'required', 
             'string',
             'min:5',
             'max:100',                 
            Rule::unique('leave_types')->where(function ($query) {
           return $query->where('leave_type_name', $this->leave_type_name)
              ->where('company_id', $this->company_id);
        })                
        ],     
        'leave_type_code' => [
             'nullable', 
             'string',
             'min:3',
             'max:20',                 
            Rule::unique('leave_types')->where(function ($query) {
           return $query->where('leave_type_code', $this->leave_type_code)
              ->where('company_id', $this->company_id);
        })                
        ],  

работают отлично.

Однако, как мне изменить:

        'employment_type_id'           => 'required|array',
        'employment_type_id.*'         => 'required',  

, чтобы написать обязательное и уникальное правило для занятости_тип_ид, компания_ид и отпуск_тип_ид. Это должно быть похоже на то, что у меня есть:

        'leave_type_name' => [              
            Rule::unique('leave_types')->where(function ($query) {
           return $query->where('leave_type_name', $this->leave_type_name)
              ->where('company_id', $this->company_id);
        })                
        ],    

Это образец:

https://i.stack.imgur.com/IXAdA.png

Примечание: Employment_type_id - это основной столбец.

Как мне этого добиться?

Спасибо.

...