Как разрешить Неизвестный столбец занятости_type_id.0 в проверке правил запроса - PullRequest
0 голосов
/ 06 апреля 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',
      ];

  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('hr_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',                
            Rule::unique('hr_leave_type_details')->where(function ($query) {
           return $query->where('leave_type_id', $this->leave_type_id);
        })                
        ],                     

     ];
  }  
}

Поле в HrLeaveDetail, employment_type_id уникально по отношению к leave_type_id и company_id.

employment_type_id и no_of_days - поля массива из таблицы hr_leave_details

Контроллер

public function create()
{
    $userCompany = Auth::user()->company_id;

    $employmenttypes   =       HrEmploymentType::where('company_id', $userCompany)->get(); 

    return view('hr.leave_types.create')
            ->with('employmenttypes', $employmenttypes);
}

public function store(StoreLeaveTypeRequest $request)
{

    $userCompany = Auth::user()->company_id;
    DB::beginTransaction(); 
    try {
        $leavetype = new HrLeaveType();
        $leavetype->leave_type_name             = $request->leave_type_name;
        $leavetype->leave_type_code             = $request->leave_type_code;
        $leavetype->description                 = $request->description;
        $leavetype->company_id                  = Auth::user()->company_id;

    $leavetype-->save();        

        foreach ( $request->employment_type_id as $key => $employment_type_id){

   $insert_array = [
            'no_of_days'                        => $request->no_of_days[$key],
            'employment_type_id'                => $request->employment_type_id[$key],                
            'leave_type_id'                     => $leavetype->id,
            'company_id'                        => Auth::user()->company_id,
        ];

        HrLeaveTypeDetail::create($insert_array );

         }

    DB::commit(); 

            Session::flash('success', 'Leave Type is created successfully');
            return redirect()->route('hr.leave_types.index');
    } catch (Exception $exception) {
      //  dd($exception->getMessage());
    DB::rollback();

            Session::flash('error', 'Action failed! Please try again');
            return redirect()->route('hr.leave_types.index');
    }
}

Это страница формы:

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

Когда я нажимал на "Отправить" на create.blade, я ожидал, что приложение сохранится в базе данных, но у меня появилась эта ошибка:

Столбец не найден: 1054 Неизвестный столбец «Employment_type_id.0» в «Где предложение» (SQL: выберите количество (*) в качестве совокупности из hr_leave_type_details, где employment_type_id. 0 = 1

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

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