Laravel插入数据库request() - > all()和添加

时间:2017-03-22 14:03:27

标签: laravel

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

实施例

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

插入的数据库只插入column9,另一列是Null。

4 个答案:

答案 0 :(得分:1)

当您使用请求时,您必须首先确保模型中有可填写的字段或保护=有空数组,例如:

class B2 extends Model
{

protected $table = 'db_table';

protected $fillable = [
    'email',
    'name',
];
}

或者您可以使用

protected $guarded = [];

//在使用保护作为可填写的地方时,请小心谨慎,因为它可以为您提供安全问题,并且只有在测试环境中才会真正使用,除非您真正知道自己在做什么!

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

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

或者你可以这样做:

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

答案 1 :(得分:0)

你必须合并数组。

qsort_r()

答案 2 :(得分:0)

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

    stmt.executeUpdate("DROP TABLE ASS2_FILM");

你可以这样做:

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

答案 3 :(得分:0)

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

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
);