将数组数组保存到数据库laravel中

时间:2016-11-20 17:06:24

标签: arrays laravel laravel-5.3

我已经阅读了之前的帖子Storing Array of Arrays让我首先展示我尝试过的内容

代码:

public function createQuestions(Request $request)
{
  $elements = 0;
  while($elements < count($data["question"])) {
     $dataArray[] = array(
       question'          => $data['question'][$elements],
       'answer'            => $data['answer'][$elements],
       'questionnaire_id'  => $data['questionnaire_id'][$elements],
       'type'              => $data['type'][$elements],
       'flag'              => $data['flag'][$elements],
       'choice'              => $data['choice'][$elements],
       'created_at'    => Carbon\Carbon::now(), // only if your table has this column
       'updated_at'    => Carbon\Carbon::now(), // only if your table has this column
        );
$elements++;

}
Question::create($dataArray);

    return back()->with('message', 'Questionnaire is being created successfully'); 
}

我面临的问题是不同的。每当我运行代码。它会抛出错误

  

未定义的偏移量:1

其次它会抛出错误

  

一般错误:1364字段&#39;回答&#39;没有默认值。每个数据库列都会抛出此错误。

我已声明这些是可填写的。因此不应该有任何问题。

protected $fillable = [
    'question', 'idea_id', 'answer', 'type', 'choice', 'flag',
];

我已将app名称更改为Questionnaire这可能是问题吗?

2 个答案:

答案 0 :(得分:1)

似乎缺少答案。

尝试类似:

...
'answer'            => (array_key_exists($elements,$data['answer']))?$data['answer'][$elements]:"", // default value
...

老实说,最好的解决方案是改变您的迁移:

$table->text()->default("");

但是这里的问题似乎是帖子请求中缺少的参数。

答案 1 :(得分:0)

您可以使用Eloquent的方法insert

Question::insert($dataArray);

注意:这不会更新或设置时间戳。但是您手动在$dataArray中添加了这些时间戳,因此您已自行修复此问题。