DateTime::__construct(): Argument #1 ($datetime) must be of type string, array given
I have next input :
<div class="form-group">
{{ Form::label('start_at', trans('admin.date_start'), ['class' => 'col-sm-3 control-label no-padding-right']) }}
<div class="col-sm-8">
<div class="input-group">
<input type="text" name="start_at[]" id="start_at" class="form-control date-picker"
data-date-format="DD.MM.Y HH:mm"
value="{{ isset($data) ? $data->start_at->format('d.m.Y H:i') : old('start_at', now()->format('d.m.Y H:i')) }}" />
</div>
</div>
</div>
And method in controller :
public function store(StoreLessonRequest $request)
{
$dates = [];
$dates[] = $request->start_at;
for ($date = 2; $date <= Lesson::MAX_LESSONS_DATE; $date++) {
$start_at = $request->input("start_at_$date");
if (!empty($start_at)) { $dates[] = $start_at; }
}
foreach ($dates as $start_at) {
$lessonData = $request->validated();
$start_at = Carbon::parse($request->start_date);
$lessonData['start_at'] = $start_at;
$lesson = Lesson::create($lessonData);
$lesson->students()->sync($request->get('students'));
}
$totalLessons = count($dates);
return redirect()->route('admin.lessons.index');
}
How to fix that error :
DateTime::__construct(): Argument #1 ($datetime) must be of type string, array given
Where does the error originate; which line in your code? Also, what does the data in $request->validated() look like?
@tykus
public function rules()
{
return [
'format_id' => 'required|integer',
'teacher_id' => 'required|integer',
'grade_id' => 'required|integer',
'subject_id' => 'required|integer',
'goal_id' => 'required|integer',
'status_id' => 'required|integer',
'description' => 'string|nullable',
'link' => 'string',
'link_registered' => 'string|nullable',
'start_at' => 'date',
'duration' => 'integer',
];
}
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
$startAt = Carbon::parse(request()->get('start_at'));
$endAt = $startAt->copy()->addMinutes(request()->get('duration') - 1);
$userId = request()->get('teacher_id');
$slotService = new SlotService();
$id = ! empty($this->route('lesson')) ? $this->route('lesson')->id : null;
if ($slotService->getTeacherLessons($userId, $startAt, $endAt, $id)->count() > 0) {
$validator->errors()->add('teacher_id', 'У данного учителя в этот период уже запланирован урок');
}
if (! $slotService->checkSlotIsAvailable($userId, $startAt, $endAt)) {
$validator->errors()->add('teacher_id', 'У данного учителя в этот период нет свободных часов');
}
});
}
@skryptoxy and...
Where does the error originate; which line in your code?
Can you share the stacktrace?
@tykus
: 87 __construct :
parent::__construct($time ?: 'now', static::safeCreateDateTimeZone($tz) ?: null);
@skryptoxy what is on line 57 of StoreLessonRequest?
@tykus I got it, but how I can pass a string in Carbon::parse ?
I tried that :
foreach (request()->get('start_at') as $startAtString) {
$startAt = Carbon::parse($startAtString);
and it giving next error
htmlspecialchars(): Argument #1 ($string) must be of type string, array given
@skryptoxy you are probably trying to output the start_at value in a Blade template.
@tykus Yeah, there is it :
<div class="form-group">
{{ Form::label('start_at', trans('admin.date_start'), ['class' => 'col-sm-3 control-label no-padding-right']) }}
<div class="col-sm-8">
<div class="input-group">
<input type="text" name="start_at[]" id="start_at" class="form-control date-picker"
data-date-format="DD.MM.Y HH:mm"
value="{{ isset($data) ? $data->start_at->format('d.m.Y H:i') : old('start_at', now()->format('d.m.Y H:i')) }}" />
</div>
</div>
</div>
but I need it, how I can fix it?
Please or to participate in this conversation.