Laravel - Как хранить данные из динамического поля формы? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу хранить данные из динамического поля формы.

И это мой код:

Мой контроллер:

 /*
 * This is For Create Question
 *
 */
public function CreateQuestion(Request $request)
{
    $this->validate($request, [
        'exercise' => 'required',
        'question' => 'required',
        'opt1' => 'required',
        'opt2' => 'required',
        'opt3' => 'required',
        'opt4' => 'required',
    ]);

    $inputs = $request->all();

    foreach ($inputs as $input)
        {
            Question::create(array(
                'exercise'=>$input['exercise'],
                'question'=>$input['question'],
                'opt1'=>$input['opt1'],
                'opt2'=>$input['opt2'],
                'opt3'=>$input['opt3'],
                'opt4'=>$input['opt4'],
            ));
        }

    return back()->with('success','Soal Berhasil dikirim.');
}

, и я использую для формы имена, такие как упражнение [].

Ирезультат моего кода:

 ErrorException
 Illegal string offset 'exercise'

Ответы [ 4 ]

0 голосов
/ 28 октября 2019
public function CreateQuestion(Request $request)
{
    $this->validate($request, [
        'exercise' => 'required',
        'question' => 'required',
        'opt1' => 'required',
        'opt2' => 'required',
        'opt3' => 'required',
        'opt4' => 'required',
    ]);

    $inputs = $request->all();

    foreach ($inputs['exercise'] as $key => $exercise)
        {
            Question::create(array(
                'exercise'=>$exercise,
                'question'=>$inputs['question'][key],
                'opt1'=>$inputs['opt1'][key],
                'opt2'=>$inputs['opt2'][key],
                'opt3'=>$inputs['opt3'][key],
                'opt4'=>$inputs['opt4'][key],
            ));
        }

    return back()->with('success','Soal Berhasil dikirim.');
}
0 голосов
/ 28 октября 2019

Я обновил свой код, здесь я могу получить все значения. Но это выглядит так:

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of 
the type array, string given,

Мой новый контроллер:

 /*
 * This is For Create Question
 *
 */
public function createQuestion(Request $request)
{
    $request->validate([
        'exercise' => 'required',
        'question' => 'required',
        'opt1' => 'required',
        'opt2' => 'required',
        'opt3' => 'required',
        'opt4' => 'required',
    ]);

    //Init
    $inputs = $request->all();


    Question::create(array(
        'exercise' => $inputs['exercise'],
        'question' => $inputs['question'],
        'opt1' => $inputs['opt1'],
        'opt2' => $inputs['opt2'],
        'opt3' => $inputs['opt3'],
        'opt4' => $inputs['opt4'],
    ));

    return back()->with('success','Soal Berhasil dikirim.');
}

Моя новая форма:

 <form>
   <select name="exercise[]"></select>
   <textarea name="question[]"></textarea>
   <input name="opt1[]"></input>
   <input name="opt2[]"></input>
   <input name="opt3[]"></input>
   <input name="opt4[]"></input>
   <!-- This is the add more filed button -->
   <button name="addMoreSoal" id="addMoreSoal"addMoreSoal">Add More 
   Soal</button> 
   <button name="submit" type="submit">Upload</button>
 </form>

И спасибо всем, кто пытался помочьмне, но мне нужно больше помощи для этого ...

0 голосов
/ 28 октября 2019

Как сказал @Tim Lewis, «вы пытаетесь создать запись Вопроса для каждого ввода формы», иначе, вы можете передать все входные данные внутри метода create, чтобы вставить новую запись вопроса в базу данных

public function CreateQuestion(Request $request)
{
    $this->validate($request, [
        'exercise' => 'required',
        'question' => 'required',
        'opt1' => 'required',
        'opt2' => 'required',
        'opt3' => 'required',
        'opt4' => 'required',
    ]);

    $inputs = $request->all();

    Question::create($inputs);

    return back()->with('success','Soal Berhasil dikirim.');
}
0 голосов
/ 28 октября 2019

Если вы перебираете $inputs, то вы, по сути, пытаетесь создать запись Question для каждого ввода формы ... Не делайте этого. Избавьтесь от foreach() и получите доступ к входам правильно:

Question::create(array(
    'exercise' => $request->input('exercise'),
    'question' => $request->input('question'),
    'opt1' => $request->input('opt1'),
    'opt2' => $request->input('opt2'),
    'opt3' => $request->input('opt3'),
    'opt4' => $request->input('opt4')
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...