模型
查询依赖表实体,一个表字段和一个类属性的关系通过映射实现,而对类的操作也就相当于在对数据表操作。
一个实体类(拥有Set和Get方法)对应一张数据库表,一个实体对象代表了数据表中一行数据记录。
生成实体
在完成数据库基本配置后,可通过 Swoft Devtool 快速生成:
php ./bin/swoft entity:create -h
//查看帮助信息php bin/swoft entity:create --table=myblog --pool=db.pool --path=@app/Models
//生成表实体
注解:
@Entity 指定类为实体类
@Column 指定成员属性为字段名
@Id 注解标签,指定成员属性为主键
Prop 操作
一、查询数据
1、单行数据查询
User::find(1, ['id', 'name']);
User::where('id', 1)->first(['id', 'name']);
2、多行数据查询
User::findMany([1, 2, 3, 4], ['id','name']);
User::whereIn('id', [1, 2, 3, 4])->get(['id', 'name']);
3、对象实体查询
$users = User::where('age', '>=', 18)->getModels(['id', 'age']);
/* @var User $user */
foreach ($users as $user) {
$age = $user->getAge();
}
4、映射关系、结果分块、Cursor(游标)、聚合函数、NotFound 异常
二、新增数据
1、对象方式
$user = User::new();
$user->setName('Swoft');
……
$user->save();
// 保存之后获取 ID
$userId = $user->getId();
2、数组方式
$attributes = [
'name' => 'Swoft',
'pwd' => '123456',
'age' => 2,
'user_desc' => 'Great Framework'
];
$user = User::new($attributes);
$user->save();
$userId = $user->getId();
3、批量新增
批量新增数据可以直接使用 User::insert($array) 方法,该方法与查询构造器方法一致。
4、其他方式新增数据: firstOrCreate 和 firstOrNew
1、firstOrCreate 方法会使用给定的字段及其值在数据库中查找记录,如果在数据库中找不到该模型,则会使用第一个参数中的属性以及可选的第二个参数中的属性新增数据。
2、firstOrNew 方法类似 firstOrCreate 方法。它会在数据库中查找匹配给定属性的记录,如果模型未被找到则会返回一个新的模型实例。
请注意,在这里面 firstOrnew 返回的模型还尚未保存到数据库,必须调用 save 方法才能写入到数据库中。
三、删除数据
1、ID方式
$user = User::find($id);
$user->delete();
2、条件删除
User::where('id', 1)->delete();
四、更新数据
1、setter方式
$user = User::find($id);
$user->setAge(2);
$user->save();
2、填充方式
$attributes = [
'name' => 'Swoft',
'pwd' => '123456',
'age' => 2,
'user_desc' => 'Come on'
];
// 方式一
User::new($attributes)->save();
// 方式二
User::new()->fill($attributes)->save();
3、update方式
User::find($id)->update(['age' => 2]);
//快速更新 modifyById
$row = User::modifyById($id, ['age' => 2]);
4、批量更新
User::where([
'name' => 'Swoft',
['age', '>=', 1]
])->limit(2)->update(['user_desc' => 'Very nice']);
//快速更新 modify
$where = ['name' => 'Swoft'];
$values = ['user_desc' => 'I love Swoft'];
User::modify($where, $values);
5、主键批量更新
$values = [
['id' => 1, 'age' => 18],
['id' => 2, 'age' => 19],
];
User::batchUpdateByIds($values);
6、更新/新增
updateOrCreate 方法实现目标数据不存在时新增数据,方法返回数据实体。也可以使用 updateOrInsert 方法,该方法返回值为 bool 类型。
$user = User::updateOrCreate(['id' => 1], ['age' => 18, 'name' => 'Swoft Framework']);
echo $user->getName();
User::updateOrInsert(['id' => 1], ['age' => 18, 'name' => 'Swoft Framework']);
7、自增/自减
//单字段 自增/自减
User::find($id)->increment('age', 1);
User::find($id)->increment('age', 1, ['name' => 'Swoft 2.0']);
User::where('id', 1)->decrement('age', 1);
//多字段 自增/自减……