Laravel -: "in_array () ожидает, что параметр 2 будет массивом, данный объект задан" в запросе на отпуск - PullRequest
0 голосов
/ 10 апреля 2020

В моем проекте Laravel -5.8 я пытался отправить запрос на отпуск по персоналу в базу данных. У меня есть 2 таблицы:

  1. hr_leave_requests

  2. hr_holidays

    protected $ fillable = ['holiday_name', 'holiday_date' , 'creat_at',];

Контроллер

public function store(StoreLeaveRequestRequest $request)
{
        $commencementDate   = Carbon::parse($request->commencement_date);
        $resumptionDate     = Carbon::parse($request->resumption_date);
        $holidays           = DB::table('hr_holidays')->select('holiday_date')->whereYear('created_at', '=', date('Y'))->get();
        $days = $commencementDate->diffInDaysFiltered(function (Carbon $date) use ($holidays) {
            return $date->isWeekday() && !in_array($date, $holidays);
        }, $resumptionDate);  
        $leaverequest = HrLeaveRequest::create([
            'leave_type_id'             => $request->leave_type_id,
            'commencement_date'         => $commencementDate,
            'resumption_date'           => $resumptionDate,  
            'no_of_days'                => $days,
        ]);    
        Session::flash('success', 'Leave Request is created successfully');
        return redirect()->route('service.leave_requests.index');               
}

Просмотр

   <form  action="{{route('service.leave_requests.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
       {{csrf_field()}}
       <div class="card-body">
        <div class="form-body">
        <div class="row">

          <div class="col-sm-4">
            <div class="form-group">
                <label>Leave Type:<span style="color:red;">*</span></label>
                <select class="form-control select2bs4" data-placeholder="Choose Leave Type" tabindex="1" name="leave_type_id" style="width: 100%;">
                    <option value="">Select Leave Type</option>
                    @if($leavetypes->count() > 0)
                        @foreach($leavetypes as $leavetype)
                            <option value="{{$leavetype->id}}">{{$leavetype->leave_type_name}}</option>
                        @endforeach
                    @endif
                </select>
            </div>
          </div> 

          <div class="col-sm-4">
            <div class="form-group">
                <label>Commencement Date:<span style="color:red;">*</span></label>
                <input type="date" class="form-control" placeholder="dd/mm/yyyy" name="commencement_date" value="{{old('commencement_date')}}"  min="{{Carbon\Carbon::now()->addDay()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}">
            </div>
          </div>                    
          <div class="col-sm-4">
            <div class="form-group">
                <label>Resumption Date:<span style="color:red;">*</span></label>
                <input type="date" class="form-control" placeholder="dd/mm/yyyy" name="resumption_date" value="{{old('resumption_date')}}"  min="{{Carbon\Carbon::now()->addDay()->format('Y-m-d')}}" max="{{Carbon\Carbon::now()->lastOfYear()->format('Y-m-d')}}">
            </div>
          </div> 

       </div>
     </div>
    </div>          
    <!-- /.card-body -->
    <div class="card-footer">
            <button type="submit" id="submit_create" class="btn btn-primary">{{ trans('global.save') }}</button>
    </div>           

    </form>

Я хочу, чтобы приложение получало no_of_days, принимая разницу между resuming_date и commencement_date в таблице hr_leave_request, а также исключая выходные. Затем go к таблице hr_holiday и получите выходной c выходной в течение выходных дней.

Я использовал это для этого:

$days = $commencementDate->diffInDaysFiltered(function (Carbon $date) use ($holidays) {
            return $date->isWeekday() && !in_array($date, $holidays);

Примечание: см. Полный код в контроллере

Когда я отправил, я получил эту ошибку:

"in_array () ожидает, что параметр 2 будет массивом, объект задан"

Как мне решить?

Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2020

Ошибка возвращается, поскольку ответ таблицы является коллекцией.

Попробуйте заменить

$holidays = DB::table('hr_holidays')->select('holiday_date')->whereYear('created_at', '=', date('Y'))->get();

на

$holidays = DB::table('hr_holidays')->select('holiday_date')->whereYear('created_at', '=', date('Y'))->get()->pluck('holiday_date')->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...