在 Laravel 中,如果我想插入所有表单输入,并且想在其中一列中添加文本,为什么我不能使用此代码?
示例
$B2 = new B2;
$B2::create([
request()->all(),
$B2->column9 = "aaaa",
]);
插入的数据库只插入第9列,其他列为Null。
create()
接受数组作为唯一参数:
public static function create(array $attributes = [])
你可以这样做:
$data = request()->all();
$data['column9'] = 'aaaa';
B2::create($data);
当您使用 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);
您必须合并数组。
$B2::create(array_merge(request()->all(), ['column9' => 'text']));
当您添加到数据库时,这称为批量分配。 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
);