模型

    一个实体类对应一张数据库的表结构

    一个实体对象代表了表的一行数据记录

    下面来看一个实体定义例子:

    注解标签

    @Entity

    标记一个类是一个实体,有两个参数

    • name 定义该实体映射的数据库表名(必填)
    • pool 该实体选择的 连接池默认为 db.pool 你可以替换成自己定义的连接池,设计这个参数的目的有 2 个,第一个你可以切换自己定义db 连接池,第二是你可以使用自己实现的数据库驱动,
      假如 User 表 是 MySQL 的, Count 表 可以是 PostSQL 的使用不同的连接池即可实现。

      @Column

      标记一个列,如果一个列没有定义@Column那么查询它将不会显示,这样即使你新增了数据库字段也不会影响生产环境运行。
    • name 定义类属性映射的表字段,没该注解标记的属性,不映射(默认为字段名为属性名)
    • prop 为字段设置一个别名
    • hidden 是否隐藏,如果为真那么它 toArray() 的时候将会被隐藏,但是不影响你通过 Getter获取它,你也可以调用实体的setVisible方法将他取消隐藏。

    2.x 去掉了 type 属性 现在会使用 属性上定义的 @var 注解定义的第一个类型,决定了返回值类型,底层会强转类型

    @Id

    对象方式

    1. $user = User::new();
    2. $user->setName('name');
    3. $user->setSex(1);
    4. $user->setDesc('this my desc');
    5. $user->setAge(mt_rand(1, 100));
    6. $id = $user->save();

    数组方式

    1. $attributes = [
    2. 'name' => uniqid(),
    3. 'password' => md5(uniqid()),
    4. 'age' => mt_rand(1, 100),
    5. 'user_desc' => 'u desc'
    6. $result3 = User::new($attributes)->save();

    批量插入

    如果你想批量插入可以使用 User::insert([])方法 使用和 查询构造器的 insert方法 使用完全一致

    删除数据

    指定 id 删除

    1. $user = User::find($id);
    2. $result = $user->delete();

    使用条件删除

    删除一条

    1. $result = User::where('stauts',1 )->limit(1)->delete();

    实体更新

    使用 setter 或者array都可以更新

    1. $user = User::find($id);
    2. $name = uniqid();
    3. $user->setAge(1);
    4. $result = $user->update(['name' => $name]);

    条件更新

    更新一条数据

    1. 'name' => 'sakuraovq',
    2. ['id', '>=', 2]
    3. ];
    4. $orWheres = [
    5. ['status', '<>', 1']
    6. ];
    7. $result = User::where($wheres)
    8. ->limit(1)
    9. ->update(['name' => 'sakuraovq' . mt_rand(1, 10)]);

    更新/插入

    可以使用updateOrCreate 返回的是一个实体

    1. $isOk = User::updateOrInsert(['id' => 1], ['age' => 18, 'name' => 'sakuraovq']);

    查询数据

    查询一条数据,返回一个实体

    1. // 方法 1
    2. $user = User::find(1, ['id','name']);
    3. // 方法 2
    4. $user = User::where('id',1)->first();

    查询多条数据

    1. // 方法 1
    2. $users = User::findMany([1,2,3,4], ['id','name']);
    3. // 方法 2
    4. $useer = User::whereIn('id', [1,2,3,4])->select(['id','name'])->get();

    如果你想获取的列表中都是 实体对象 可以使用 getModels 方法,该方法返回的是一个实体数组 你可以这样使用:

    有时候我我们需要按数据库某个键作为 key 我们逻辑映射关系,可以使用 CollectionkeyBy 方法。

    假如 需要第一页 数据需要以id作为key 你可以这样使用:

    1. $users = User::forPage(1, 10)->get(['id', 'age'])->keyBy('id');
    2. /* @var User $user */
    3. foreach ($users as $id => $user) {
    4. }

    更多方法请参照 查询构造器