zoukankan      html  css  js  c++  java
  • 初识thinkphp(5)

    这次主要内容是模型的基本操作

    0x01:什么是模型

    通过手册的阅览,笼统的说就是,把打开数据库等操作在另一个php文件中进行

    以及对变量的规则具体细节,查询,取值等操作进行定义,方便在控制器中直接使用。

    0x02:模型的使用

    在index目录下创建与controller同级的目录model

    创建php模型文件,并调用thinkModel文件

    <?php
        namespace appindexmodel;
        use thinkModel;
        class User extends Model{
            protected $table = 'think_user';
            protected function getBirthdayAttr($birthday){
                return date('Y-m-d', $birthday);
            }
            protected function setBirthdayAttr($value){
                return strtotime($value);
            }
            protected function scopeEmail($query){
                $query->where('email', '4396@qq.com');
            }
        }
    
    ?>

    table是获取数据库变量,之前在applicationdatabase.php文件中已经对打开数据库进行关联了。

    getBirthdayAttr函数中命名规则 get + 名称 + Attr

    这样能在控制器中直接调用 echo birthday变量 而不用再用date()函数进行转换

    setBirthdayAttr函数中命名规则 set + 名称 + Attr

    这样在控制器中修改birthday不用调用strtotime()函数,而是直接的user->birthday = 'xxxx-xx-xx'

    scopeEmail函数中命名规则 scope + 名称

    这样在查询的时候不用再写sql语句或者thinkphp自带的sql调用,就可以查询相关联内容

    注意:这里的函数中“名称”即使变量名,如果不是变量名,会出现错误。

    0x03:在控制器中模型的调用

    对于数据库的操作无意就是增删改查

     public function add()
        {
            $user           = new UserModel;
            $user->nickname = 'sijidou';
            $user->email    = 'sijidou@qq.com';
            $user->birthday = "1998-10-30"      //strtotime('1998-10-30');
            if ($user->save()) {
                return 增加成功信息;
            } else {
                return $user->getError();
            }
        }

    增加无疑就是new一个模型,注意这里的对象是模型里面的类名,这里因为控制器名字也叫User于是用引用修改了下模型中的User的名字

        use appindexmodelUser as UserModel;

    这里的birthday实则调用了模型中的setBirthdayAttr函数,如果没有setBirthdayAttr函数,信息可以存储,但在最后输出时候时间固定是1970-01-01的默认值(我这里是这样的)

        public function update($id){
                $user = UserModel::get($id);
                $user->nickname = 'tudou';
                $user->email = '4396@qq.com';
                $user->birthday = '1999-4-5';
                $user->save();
            }
    
            public function delete($id){
                $user = UserModel::get($id);
                if($user){
                    $user->delete();
                    return '删除用户成功';
                }
                else{
                    return '删除用户不成功';
                }
            }
            public function search($email){
                $list = UserModel::scope('email', $email)->select();
                foreach($list as $user){
                    echo $user->nickname . '<br/>';
                    echo $user->email . '<br/>';
                    echo $user->birthday . '<br/>';
                }
            }

    改删查中,改和删都用到的是get,对应的默认调用了getBirthdayAttr函数,而查中的scope则调用的是scopeEmail函数,如果将email变量该为nickname并在模型中添加相应的scopeNickname($nickname)那么可以根据nickname的值进行查询。

    0x04:与view之间的交互

    这里我使用的官方提供的html模板,源码就不贴了,反正就是个form表格,和一点css。

     这里将控制器的内容传到视图里面去,需要用view方法,且对应打开的视图文件名称默认为方法名称

     

    访问的路径为http://192.168.60.132/index/user/create

    这里对add()函数进行修改

    input函数这里是thinkphp特有的参数,主要功能是用来修改将代码赋值内容改为用接收post传参这里的"post."中的'.'主要是用来匹配所有的参数,如果具体到某一个可以"post.nickname"

    allowField(true)是thinkphp中特有的函数,功能是用来过滤非数据表中的数据

    validate()函数是tinkphp中特有的函数,功能主要是用来校验post过来的数据是否符合规范。

    validate的内容在validate的模板中定义(在5.1版本中不可这样定义了,直接在控制器下写个函数就行)

    validate模板路径  .indexvalidateUser.php

    内容为

     

    用rule来给键值对规定

    require是必填

    min:5是长度最小为5

    email是检测是否符合邮箱规范

    dateFormat:Y-m-d检测是否符合日期规范(数值不在月份日份以内也不行)

    checkMail自定义方法:$value => email参数 $rule => 'qq.com'规则,用if语句判断

    preg_match是用于正则表达式匹配的比较函数

    0x05:关联与输出

    手册讲的挺多的,无非就是一对一、一对多、多对多

    一对一:在一个中用this->hasOne(另一个模型名),另一个用belongsTo(前一个模型名)

    一对多:在一个中用this->hasMany()来定义额外的(),其他与一对一一样

    多对多:与一对多差不多,即在每个模型中的belongToMany(对应模型1,对应模型2,。。。)

    在add中如果要对关联的模型修改

    当前模型->关联模型->关联模型变量 = 内容

     保存时候用(这里用的示例函数,作者懒不想测试了,以后用得上再使用)

    模型输出

    无非就是操作器里面输出或者跳转到视图里面输出

    跳转到视图用view('视图文件名字'),一般是在controller同级目录下的view文件里面

    不带参数默认与方法名字相同。

    在操作器内输出用var_dump也行,return也行

    这里还可以用ToArray()来将数组输出,hidden([变量名])来隐藏相应变量输出,visible([变量])来指定有且只有定义的变量输出。

    总结:这节内容差不多就这样,之前写的几篇示例我觉得太详细了,以至于像教科书般的流水账,写博文主要还是记笔记,记重点,所以这里比较精简。以及最后的关联相关的内容并没有测试,等到以后实际操作时候再用吧。最近要期末了,又没期末复习,又没写博客,真是太颓废了。

  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/sijidou/p/9195986.html
Copyright © 2011-2022 走看看