坚持
除了使用 Eloquent 读取数据外,你还可以使用它来使用 save()
方法插入或更新数据。如果你已创建新模型实例,则将插入记录 ; 否则,如果你从数据库中检索了模型并设置了新值,则会更新它。
在这个例子中,我们创建了一个新的 User
记录:
$user = new User();
$user->first_name = 'John';
$user->last_name = 'Doe';
$user->email = 'john.doe@example.com';
$user->password = bcrypt('my_password');
$user->save();
你还可以使用 create
方法使用数据数组填充字段:
User::create([
'first_name'=> 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'password' => bcrypt('changeme'),
]);
使用 create 方法时,应在模型中的 fillable
数组中声明属性:
class User extends Model
{
protected $fillable = [
'first_name',
'last_name',
'email',
'password',
];
}
或者,如果你想使所有属性都可以分配,你可以将$ guarded 属性定义为空数组:
class User extends Model
{
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
}
但是你也可以使用 forceCreate
方法而不是 create
方法创建一个记录,甚至不用改变模型中的 fillable
属性
User::forceCreate([
'first_name'=> 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'password' => bcrypt('changeme'),
]);
以下是通过首先加载(通过使用 find
),修改它,然后保存它来更新现有 User
模型的示例:
$user = User::find(1);
$user->password = bcrypt('my_new_password');
$user->save();
要通过单个函数调用完成相同的专长,你可以使用 update
方法:
$user->update([
'password' => bcrypt('my_new_password'),
]);
create
和 update
方法使得处理大型数据集比单独设置每个键/值对要简单得多,如以下示例所示:
注意在收集请求数据时使用
only
和except
。指定要允许/禁止更新的确切密钥非常重要,否则攻击者可能会发送带有请求的其他字段并导致意外更新。
// Updating a user from specific request data
$data = Request::only(['first_name', 'email']);
$user->find(1);
$user->update($data);
// Create a user from specific request data
$data = Request::except(['_token', 'profile_picture', 'profile_name']);
$user->create($data);