在laravel中将数组值插入数据库

Posted

技术标签:

【中文标题】在laravel中将数组值插入数据库【英文标题】:Insert array values into database in laravel 【发布时间】:2018-06-16 03:26:50 【问题描述】:

我有 8 个随机来自数据库的不同问题。

现在我想将question_iduser_iden_answer 插入到en_answers 表中。

数据已插入,但出现一些错误,例如 - 第一个是,它只插入一行值,第二个是,问题 id 不正确。

我尝试了类似下面的方法。有人请帮助纠正控制器方法 -

index.blade.php -

<form action=" url('en-question-answer') " method="POST">
        csrf_field() 
  <?php 
    $count=1;
  ;?>
  @foreach($equestions as $equestionType)
      @foreach($equestionType as $key => $equestion)
          <p> $equestion->question </p>
          <input type="hidden" name="question_id[$count]" value=" $equestion->id ">
          <label class="radio-inline">
           <input type="radio" name="en_answer[$count]" value=" $equestion->option1 "> $equestion->option1 
          </label>
           <label class="radio-inline">
           <input type="radio" name="en_answer[$count]" value=" $equestion->option2 "> $equestion->option2 
           </label>
             <hr>
    <?php $count++; ?>
       @endforeach
   @endforeach      
  <button type="submit" class="btn btn-primary btn-sm pull-right">Submit</button></form>

在我的控制器中-

    public function store(Request $request, User $user)
    $user_id = Sentinel::getUser()->id;

    $answer = new EnAnswer;
    $answer->user_id     = $user_id;

    $data = Input::get();
    for($i = 1; $i < count($data['en_answer']); $i++) 
        $answer->en_answer     = $data['en_answer'][$i];
    
    for($i = 1; $i < count($data['question_id']); $i++) 
        $answer->question_id     = $data['question_id'][$i];
    

    //dd($answer);
    //return $answer;
    $answer->save();
    return redirect('submitted')->with('status', 'Your answers successfully submitted');


【问题讨论】:

我相信 Laravel 有 Object::insert(array $array)DB::table([name])-&gt;insert(array $array)) 插入数组的方法 是的,但为此您必须将 key-value .. key 设置为需要插入的列名和值。 @RaymondNijland 【参考方案1】:

您只向 DB 中插入了一个答案,即最后一个答案。此外,您只需一个查询即可准备数据并插入所有答案:

public function store(Request $request)

    for ($i = 1; $i < count($request->en_answer); $i++) 
        $answers[] = [
            'user_id' => Sentinel::getUser()->id,
            'en_answer' => $request->en_answer[$i],
            'question_id' => $request->question_id[$i]
        ];
    
    EnAnswer::insert($answers);
    return redirect('submitted')->with('status', 'Your answers successfully submitted');
  

【讨论】:

【参考方案2】:
$answers = [];
for ($i = 0; $i < count($request->day); $i++) 
    $answers[] = [
        'day' => $request->day[$i],
        'from' => $request->from[$i],
        'to' => $request->to[$i]
    ];

【讨论】:

请在您的回答中添加解释 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review

以上是关于在laravel中将数组值插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.6 中将数组插入数据库

在laravel中将多个数据插入数据库

如何在 php 中将数组值作为键值对插入到数据库表中

Laravel 存储/插入数组值到数据库 Mysql

在MySQL多次插入中将数组值加入字符串

在laravel中将数据插入数据透视表