THINKpHp5的基本模型关联

2023-11-01    分类: 网站建设

1.创建thinkpHp模型

用cmd指令在文件根目录下创建模型
php think make:model 模块/模型名称

模型会创建在application目录下的 “模块\模型[模型名称]” 中。

2.模型命名

模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,比如表的表前缀是 db_ 在模型名称里就需要省略掉。所以 db_admin 表的模型类名就是 Admin , db_admin_message 的模型类名就是AdminMessage

3.一对一关联

hasOne (‘关联模型名’,‘关联外键’,‘主键’,‘别名定义’, ‘join类型’)

  • 关联操作都是基于(第一)模型的话,(第二)模型中并不需要定义关联方法,使用belongsTo 方法就可以。
    belongsTo 方法和 hasOne 一样,也有5个参数:

belongsTo(‘关联模型名’,‘关联外键’,‘关联模型主键’,‘别名定义’,‘join类型’)

a.模型定义

    //  定义关联方法,在User模型哄下定义    public function profile(){        //HASONE关联        return $this->hasOne('profile','id', 'id');    }

在User模型定义好关联的方法之后在profile模型里可以不用写任何对应的方法,但是必须最少要有一个对应db_profile 表的空模型。

b.倘若关联操作都基于profile方法时,在profile模型下定义

    public function user(){                            //档案bELONGSTO关联操作都基于profile方法时,直接使用            return $this->belongsTo('User');                }

c.控制器调用

     public function index($name='name'){        //get 1 是获取id为 1 的数据        //find() 是查找        //toArray()  是获取到的数据转为数组        $admin= Admin::get(1);        //查巡当前Admin模型数据        var_dump($admin->find()->toArray());        //查巡关联模型AdminMessage模型数据        $admin= $admin->AdminMessage->find()->toArray();     }

d.输出结果:

4.一对多关联

hasMany(‘关联模型名’,‘关联外键’,‘关联模型主键’,‘别名定义’)

a.模型调用

    public function books(){        return $this->hasMany('book','id','id');    }

b.控制器调用

  • 关联添加:也可以批量增加数据

  • 关联查询:可以直接调用模型的属性获取全部关联数据

    public function read(){       $user = UserModel::get(1);       // 获取状态为1的关联数据       $books = $user->books()->where('status',1)->select();       dump($books);       // 获取作者写的某本书       $book = $user->books()->getbyTitle('ThinkpHp5快速入门');       dump($book);    }

  • 关联更新:

    public function update($id){    $user = UserModel::get($id);    $book = $user->books()->getbyTitle('ThinkpHp5开发手册');    $book->title = 'ThinkpHp5快速入门';    $book->save();    }

  • 关联删除:

    //删除部分关联数据:    $book = $user->books()->getbyTitle('ThinkpHp5开发手册');    $book->delete();    //删除所有的关联数据:    if($user->delete()){    // 删除所有的关联数据    $user->books()->delete();    }

5.多对多关联

一个用户会有多个角色,同时一个角色也会包含多个用户,这就是一个典型的多对多关联
多对多关联通常一定会有一个中间表,也称为枢纽表,所以需要创建一个用户角色的中间表
belongsToMany 的参数如下

belongsToMany(‘关联模型名’,‘中间表名称’,‘关联外键’,‘关联模型主键’,‘别名定义’)

对于枢纽表并不需要创建模型类,在多对多关联关系中,并不需要直接操作枢纽表。

a.模型定义

    // 定义多对多关联    public function roles(){    // 用户 bELONGS_TO_MANY 角色    return $this->belongsToMany('Role', 'think_access');    }

  • 关联新增

    新增用户角色 并自动写入枢纽表
    $user->roles()->save(['name' => 'editor', 'title' => '编辑']);

  • 批量新增

    $user->roles()->saveAll([    ['name' => 'leader', 'title' => '领导'],    ['name' => 'admin', 'title' => '管理员'],    ]);

由于该角色已经存在了,所以只需要使用attach 方法增加枢纽表的关联数据:

$user->roles()->attach($role);

  • 关联删除

    使用detach 方法删除关联的枢纽表数据,但不会删除关联模型数据

    $user->roles()->detach($role);

    删除枢纽表的同时删除关联模型

    $user->roles()->detach($role,true);

6.模型输出

  • 输出数组: toArray 方法把模型对象输出为数组。

    $user->toArray()

  • 隐藏属性:hidden方法在输出的时候隐藏某些属性

    模型名->方法([字段名称,字段名称,***]) $user->hidden(['create_time','update_time'])->toArray()

  • 指定属性:visible方法指定一些属性输出

    模型名->方法([字段名称,字段名称,***])

    $user->visible(['id','nickname','email'])->toArray()

  • 追加属性

    如果读取器定义了一些非数据库字段的读取,例如:

    class User extends Model{        // status修改器        protected function getUserStatusAttr($value){        $status = [-1 => '删除', 0 => '禁用', 1 => '正常', 2 => '待审核'];        return $status[$value];    &n            

新闻标题:THINKpHp5的基本模型关联
文章网址:https://www.cdcxhl.com/news30/291880.html

成都网站建设公司_创新互联,为您提供网站策划移动网站建设服务器托管动态网站用户体验关键词优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司