代码之家  ›  专栏  ›  技术社区  ›  Jaeger

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

  •  0
  • Jaeger  · 技术社区  · 6 年前

    所以,我有以下代码:

    $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 回复  |  直到 6 年前
        1
  •  1
  •   Mozammil    6 年前

    当你使用 save() ,您实际上正在使用 Mass assignment .因此,要么显式地将模型中的所有字段定义为可批量分配,要么可以使用 create() 相反。

    但是,在您的特定情况下,可以将整个方法清理到一行:

    return Homepage::updateOrCreate($request->all());
    
        2
  •  0
  •   YouriKoeman    6 年前

    如果希望模型根据给定数组自动填充,则需要创建一个类似于此的新模型实体

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

    如果你给一个数组 save() 它期望保存选项而不是为要分配的值

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

    laravel api docs for model::create()