• CURD 操作 [1]


           create创建新数据

    首先在主目录下创建index.html,与index.php同级,插入以下代码

    <meta charset="utf-8">
    <form method="post" action="http://localhost/demo39/index.php/Home/User/create">
      <p>用户:<input type="text" name="user" /></p>
      <p>邮箱:<input type="text" name="email" /></p>
      <p>生日:<input type="text" name="birthday" /></p>
      <input type="submit" value="提交">
    </form>

    然后在 Home/controller/UserController.class.php 插入以下代码

    <?php
    // 本类由系统自动生成,仅供测试用途
    namespace HomeController;
    use ThinkController;
    use ThinkModel;
    
    class UserController extends Controller {
            public function create() {
                $user = M('User');
                var_dump($user->create());
            }
    }

    因为数据表的结构为:

    所以当在index.php中点击发送后,var_dump()出的只有user和email的数据,

    也就是说,在index.html中建立表单时,设定的name应该与数据表中的名字是对应的。

    class UserController extends Controller {
            public function create() {
                $user = M('User');
                $data['user']='小李';
                $data['email']='xiaoli@qq.com';
                $data['date']=date('Y-m-d H:i:s');
                var_dump($user->create($data));
    
            }
    }

    这时var_dump出的数据就是$data设定的数据

    class UserController extends Controller {
            public function create() {
                $user = M('User');
                $data = new stdClass();
                $data->user = $_POST['user'];
                $data->email = $_POST['email'];
                $data->date =date('Y-m-d H:i:s');
                var_dump($user->create($data));
            }
    }

    这时var_dump()的数据就是index.html提交过来的user和email的值,再加上date.

    上面介绍的是POST 的方法,也就是index.html中的表单中的 method="post" ,如果改为 method="get" ,则

    在 Home/controller/UserController.class.php 中的代码为

    class UserController extends Controller {
            public function create() {
                $user = M('User');
                var_dump($user->create($_GET));
    
            }
    }

    也就是把create中的方式改为$_GET才能var_dump()出接收到的数据

    create()方法可以传递第二个参数,将要操作的模式,有两种:Model::MODEL_INSERT
    和 Model::MODEL_UPDATE,即新增和修改。当没有指定的时候,系统会根据数据源是否包
    含主键来自动判断,如果包含主键,则就是修改操作。

    也就是

    $user = M('User');
    var_dump($user->create($_POST, Model:: MODEL_INSERT ));

    create()方法的内部工作分为 9 步:
    1.获取数据源(默认是 POST);
    2.验证数据合法性(非数据或对象会过滤),失败则返回 false;
    3.检查字段映射;
    4.判断数据状态(新增还是修改);
    5.数据自动验证,失败则返回 false;
    6.表单令牌验证,失败则返回 false;
    7.表单数据赋值(过滤非法字段和字符串处理);
    8.数据自动完成;
    9.生成数据对象(保存在内存)。


    create()方法可以配合连贯操作配合数据创建,支持的连贯操作有:
    1.field,用于定义合法的字段;
    2.validate,用于数据自动验证;
    3.auto,用于数据自动完成;
    4.token,用于令牌验证。

    限制可操作的字段
    $user = M('User');
    var_dump($user->field('user')->create());

    这时只把收到的user的数据插入数据库

    第二种方法是在 Home/Model/UserModel.class.php 里插入:

    class UserModel s extends Model {
     protected $insertFields = 'user';
     protected $updateFields = 'user';
    }

    然后在 Home/controller/UserController.class.php 插入

    $user = D('User');
    var_dump($user->create($data));

    注意,这里用的是D('User');

    为什么要用D方法呢?因为将业务逻辑定义在了自定义的模型类里面(Lib/Model目录下),而想在操作中实现这些业务逻辑,则需要使用到D 方法

    关于D和M的方法,可以查看  这篇文章

    add数据写入

     Home/controller/UserController.class.php 内插入以下代码

    public function add() {
                $user=M('user');
                $data['user']='小李';
                $data['email']='xiaoli@qq.com';
                $data['date']=date('Y-m-d H:i:s');
                $user->add($data);
            }

    结合create()方法

    $user = M('User');
    $data = $user->create();
    $data['date'] = date('Y-m-d H:i:s');
    $user->add($data);

    此时在原先写的index.html里提交表单,提交的action应该为 http://localhost/demo39/index.php/Home/User/add 

    因为如果直接使用 $user->add(); 而不加上

    $data = $user->create();
    $data['date'] = date('Y-m-d H:i:s');

    这时提交到数据库的数据就没有时间了,因为在提交表单的时候提交时间的数据。

    add()方法支持的连贯操作有:
    1.table,定义数据表名称;
    2.data,指定要写入的数据对象;
    3.field,定义要写入的字段;
    4.relation,关联查询;
    5.validate,数据自动验证;
    6.auto,数据自动完成;
    7.filter,数据过滤;
    8.scope*,命名范围;
    9.bind,数据绑定操作;
    10.token,令牌验证;
    11.comment,SQL 注释;

    使用data连贯方法

    $user = M('User');
    $data = $user->create();
    $data['date'] = date('Y-m-d H:i:s');
    $user->data($data)->add();

    data连贯方法 支持字符串、数组、对象

    $user = M('User');
    $data = 'user=星矢&mail=xinshi@qq.com&date='.date('Y-m-d H:i:s');
    $user->data($data)->add();
  • 相关阅读:
    WinAPI: ExtTextOut 扩展的文本输出
    WinAPI: SetTextCharacterExtra 设置字符间距
    WinAPI: DrawTextEx 多功能文本绘制
    WinAPI: sndPlaySound 播放 wav 文件
    WinAPI: SetTextColor 设置设备环境的文本颜色
    WinAPI: DrawText 将文本绘制到指定的矩形中
    WinAPI: GetTextColor 获取设备环境的文本颜色
    WinAPI: GetTextAlign 获取绘图环境的文本对齐方式
    ulimit限制之nproc问题
    基于EPOLL写的HTTP服务器(加入了线程池)
  • 原文地址:https://www.cnblogs.com/jacson/p/4490815.html
Copyright © 2020-2023  润新知