【问题标题】:Laravel insert into database request()->all() and additionLaravel 插入数据库 request()->all() 并添加
【发布时间】:2017-03-22 14:03:26
【问题描述】:

在 laravel 中,如果我想插入所有表单输入并且我想在其中一列中添加文本,为什么我不能使用此代码?

例子

    $B2 = new B2;
    $B2::create([
        request()->all(),
        $B2->column9 = "aaaa",
    ]);

插入的数据库只插入column9,其他column为Null。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    因为create() 接受一个数组作为唯一参数:

    public static function create(array $attributes = [])
    

    你可以这样做:

    $data = request()->all();
    $data['column9'] = 'aaaa';
    B2::create($data);
    

    【讨论】:

      【解决方案2】:

      当您使用 request all 时,您必须首先确保您的模型中有可填充字段或将 = 保护为空数组,例如:

      class B2 extends Model
      {
      
      protected $table = 'db_table';
      
      protected $fillable = [
          'email',
          'name',
      ];
      }
      

      或者你可以使用

      protected $guarded = [];

      // 使用 Guarded 作为可填充的 Pose 时请小心,因为它会给您带来安全问题,并且应该只在测试环境中真正使用,除非您真的知道自己在做什么!

      至于你的创建方法,你应该确保它是一个像这样的关联数组:

      $B2::create([
          $B2->column9 => "aaaa",
      ]);
      

      或者你可以这样做:

          $data = $request->except('_token');
          $B2::create($data);
      

      【讨论】:

        【解决方案3】:

        你必须合并数组。

        $B2::create(array_merge(request()->all(), ['column9' => 'text']));
        

        【讨论】:

          【解决方案4】:

          当您添加到数据库中时,它被称为批量分配。 Laravel 会自动防止这种情况发生,因此您需要将名称添加到模型中的可填充属性中

          protected $fillable = ['field1', 'column9'] //etc
          

          https://laravel.com/docs/5.4/eloquent#mass-assignment

          您还需要确保将数组传递给 create 方法

          $my_array = $request->all()
          $my_array['column9'] = 'aaaa';
          $B2::create(
              $my_array
          );
          

          【讨论】:

            猜你喜欢
            • 2016-07-01
            • 2016-03-11
            • 2020-01-21
            • 1970-01-01
            • 2020-06-06
            • 1970-01-01
            • 2017-07-06
            • 2019-10-18
            • 1970-01-01
            相关资源
            最近更新 更多