在laravel中,如果我想插入所有表单输入,并且我想在其中一个列中添加文本,为什么我不能使用此代码?
实施例
$B2 = new B2;
$B2::create([
request()->all(),
$B2->column9 = "aaaa",
]);
插入的数据库只插入column9,另一列是Null。
答案 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
);