@asdasdqwe

Как записать значение массива в базу laravel?

$request->except('_token');
619506271b584031633931.png
public function store(ApplicantSkillsRequest $request)
    {
        $applicant = $request->user();
        $params = $request->except('_token');

        ApplicantSkill::create([
            'user_id' => $applicant->id,
            'name' => $params['name'],
            'level' => $params['level'],
        ]);

        return redirect()->route('applicant.skills.index');
    }


model User.php
public function skills()
    {
        return $this->hasMany(ApplicantSkills::class);
    }


В итоге ошибка: Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, int given

Должно получиться две записи в таблице applicant_skills:
user_id      name       level
1             js           55
1             php          85
  • Вопрос задан
  • 273 просмотра
Решения вопроса 2
@asdasdqwe Автор вопроса
Вот так работает, правда не знаю есть ли метод laravel, позволяющий сделать это в одну строку
public function store(ApplicantSkillsRequest $request)
    {
        $applicant = $request->user();
        $params = $request->except('_token');

        $levels = $request->level;

        foreach($request->name as $i => $name) {
            $skill = new ApplicantSkill;
            $skill->user_id = $applicant->id;
            $skill->name = $name;
            $skill->level = $levels[$i];

            $skill->save();
        }

        return redirect()->route('applicant.skills.index');
    }
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
А не проще сделать так, чтобы в запросе приходили данные в нормальном виде? А вообще что-то типа такого:
$request = [
    'name' => ['js', 'php'],
    'level' => ['55', '85'],
  ];
  $collection = collect($request['name'])->map(function ($item, $key) use ($request) {
    return ['name' => $item, 'level' => $request['level'][$key]];
  });
   ApplicantSkill::create($collection)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы