laravel 5.1 ErrorException: preg_replace (): несоответствие параметра, шаблон — строка, а замена — массив

У меня есть следующая модель с заполняемыми свойствами:

class Job extends Model {

protected $fillable = [
'job_type_id',
'recruiter_id',
'start_at',
'end_at',
'job_title',
'job_ref',
'job_desc'

];

// other stuff
}

У меня есть форма для обновления работы, которая включает в себя несколько выпадающих списков множественного выбора следующим образом:

<form class="js-job-posting" enctype="multipart/form-data" accept-charset="UTF-8" action="http://localhost:8000/jobs/2" method="POST">
<input type="hidden" value="PATCH" name="_method">
<input type="hidden" value="iElj170OKBLg9THP7iETwsn34iuVhdpBX3hF98UA" name="_token">
<div class="form-group ">
<label for="job_title">Job title</label>
<input id="job_title" class="form-control" type="text" name="job_title">
</div>

<div class="form-group ">
<label for="industry_list">Industry</label>
<select id="industry_list" class="form-control name="industry_list[]" multiple="" >
<option value="1">Accounting</option>
<option value="37">Administration</option>
...
</select>
</div>
</form>

В моем контроллере у меня есть следующий метод для обновления задания, но я получаю ошибку:

ErrorException in helpers.php line 671: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array

Кажется, с использованием Auth::user()->recruiter->jobs()->update($request->except('job_type_id')); вызывает эту ошибку, потому что объект запроса содержит массив для industry_list. Но почему это важно, поскольку я определил массовые атрибуты, которые можно заполнить, в классе Job?

public function update(JobRequest $request, $id)
{
$job = Job::findOrFail($id);

Auth::user()->recruiter->jobs()->update($request->except('job_type_id'));

$job->industries()->sync($request->input('industry_list'));

flash()->success('Job details have been updated');

return redirect('/job/' . $id . '/edit');
}

Странно, когда я исключаю industry_list следующим образом: Auth::user()->recruiter->jobs()->update($request->except('job_type_id', industry_list')); и затем сделать обновление, я получаю следующую ошибку SQL:

 SQLSTATE[42S22]: Column not found: 1054 Unknown column '_method' in 'field list' (SQL: update `jobs` set `_method` = PATCH, `_token` = iElj170OKBLg9THP7iETwsn34iuVhdpBX3hF98UA,...

Почему генерируется SQL, включающий каждое поле в форме для обновления, включая _method и _token?

Это как-то связано с построителем запросов, игнорирующим заполняемые поля?

0

Решение

Если у вас есть только одно поле для обновления, используйте:

->update($request->only('job_title'));

в противном случае вы должны исключить все остальные поля, например:

->update($request->except(['job_type_id', 'industry_list', '_method', '_token']));

$fillable свойство не просматривается при обновлении отношения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]