当在数组中显示数据时,Laravel为什么将每个字段都保存为“ true”?

时间:2019-01-22 16:07:27

标签: php laravel orm

所以,我有以下代码:

$homepage = Homepage::first();
if (!$homepage) {
  $homepage = new Homepage;
}

$homepage->first_presta_title = $request->first_presta_title;
$homepage->first_presta_content = $request->first_presta_content;
$homepage->second_presta_title = $request->second_presta_title;
$homepage->second_presta_content = $request->second_presta_content;
$homepage->third_presta_title = $request->third_presta_title;
$homepage->third_presta_content = $request->third_presta_content;
$homepage->shiatsu_text = $request->shiatsu_text;
$homepage->shiatsu_image = $request->shiatsu_image;
$homepage->doin_text = $request->doin_text;
$homepage->doin_image = $request->doin_image;

$homepage->save();

一切正常,但是我想看看是否有没有更好的方法来保存数据而不将每个元素分配给它的列,然后我发现有人通过使用以下代码来回答问题:

$homepage->save($request->all());

所以我自己尝试了一下,但是什么也没发生:没有错误,但是也没有保存在数据库中。

那么,有没有最快的方法来保存数据?是否可以使用循环保存所有内容?

提前谢谢

2 个答案:

答案 0 :(得分:1)

使用save()时,实际上是在使用Mass assignment。因此,您可以将模型中的所有字段明确定义为可大规模分配,也可以改用create()

但是,在您的特殊情况下,整个方法可以清除为仅一行:

return Homepage::updateOrCreate($request->all());

答案 1 :(得分:0)

如果您要基于给定的数组自动填充模型,则需要创建一个像这样的新模型实体

 $homepage = HomePage::create($request->all());
 $homepage->save()

如果将数组赋给save(),则期望用于保存的选项不分配值

来源: laravel api docs for model/save()

laravel api docs for model::create()