新增,更新,删除
最后更新于:2022-04-01 15:11:46
要从模型新增一条数据到数据库,只要建立一个模型实例并调用 save 方法即可。
## 储存新的模型数据
~~~
$user = new User;
$user->name = 'John';
$user->save();
~~~
> 注意: 通常 Eloquent 模型主键值会自动递增。但是您若想自定义主键,将 incrementing 属性设成 false 。
也可以使用 `create` 方法存入新的模型数据,新增完后会返回新增的模型实例。但是在新增前,需要先在模型类里设定好 `fillable` 或 `guarded` 属性,因为 Eloquent 默认会防止批量赋值。
在新模型数据被储存或新增后,若模型有自动递增主键,可以从对象取得 id 属性值:
~~~
$insertedId = $user->id;
~~~
## 在模型里设定 Guarded 属性
~~~
class User extends Model {
protected $guarded = ['id', 'account_id'];
}
~~~
## 使用模型的 Create 方法
~~~
// 在数据库中建立一个新的用户...
$user = User::create(['name' => 'John']);
// 以属性找用户,若没有则新增并取得新的实例...
$user = User::firstOrCreate(['name' => 'John']);
// 以属性找用户,若没有则建立新的实例...
$user = User::firstOrNew(['name' => 'John']);
~~~
## 更新取出的模型
要更新模型,可以取出它,更改属性值,然后使用 save 方法:
~~~
$user = User::find(1);
$user->email = 'john@foo.com';
$user->save();
~~~
## 储存模型和关联数据
有时您可能不只想要储存模型本身,也想要储存关联的数据。您可以使用 push 方法达到目的:
~~~
$user->push();
~~~
您可以结合查询语句,批次更新模型:
~~~
$affectedRows = User::where('votes', '>', 100)->update(['status' => 2]);
~~~
> 注意: 若使用 Eloquent 查询构造器批次更新模型,则不会触发模型事件。
## 删除模型
要删除模型,只要使用实例调用 delete 方法:
~~~
$user = User::find(1);
$user->delete();
~~~
## 按主键值删除模型
~~~
User::destroy(1);
User::destroy([1, 2, 3]);
User::destroy(1, 2, 3);
~~~
当然,您也可以结合查询语句批次删除模型:
~~~
$affectedRows = User::where('votes', '>', 100)->delete();
~~~
## 只更新模型的时间戳
如果您只想要更新模型的时间戳,您可以使用 touch 方法:
~~~
$user->touch();
~~~