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

问题描述 投票:0回答:4

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

示例

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

插入的数据库只插入第9列,其他列为Null。

php laravel
4个回答
1
投票

因为

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

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

你可以这样做:

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

1
投票

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

class B2 extends Model
{

protected $table = 'db_table';

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

或者你可以使用

protected $guarded = [];

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

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

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

或者你可以这样做:

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

0
投票

您必须合并数组。

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

0
投票

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

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

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

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

$my_array = $request->all()
$my_array['column9'] = 'aaaa';
$B2::create(
    $my_array
);
© www.soinside.com 2019 - 2024. All rights reserved.