坚持

除了使用 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'),
]);

createupdate 方法使得处理大型数据集比单独设置每个键/值对要简单得多,如以下示例所示:

注意在收集请求数据时使用 onlyexcept。指定要允许/禁止更新的确切密钥非常重要,否则攻击者可能会发送带有请求的其他字段并导致意外更新。

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