Laravel-如何从动态表单字段存储数据?

时间:2019-10-28 14:53:29

标签: php database laravel

我想存储动态表单字段中的数据。

这是我的代码:

我的控制器:

 /*
 * 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.');
}

我在表单中使用诸如exercise []之类的名称。

我的代码的结果是:

 ErrorException
 Illegal string offset 'exercise'

4 个答案:

答案 0 :(得分:0)

如果要遍历$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')
));

答案 1 :(得分:0)

我更新了代码,在这里我可以获取所有值。但它看起来像这样:

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>

感谢所有尝试帮助我的人,但是我需要更多帮助...

答案 2 :(得分:0)

正如@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.');
}

答案 3 :(得分:0)

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.');
}