• FuelPHP 系列(三) ------ Model 模型


    框架封装好的 model 类有几个,按需继承就好。

    有:/fuel/core/classes/model/crud.php

      /fuel/packages/orm/classes/model.php

      /fuel/packages/orm/classes/model/soft.php  包含软删除的相关方法

      /fuel/packages/orm/classes/model/nestedset.php

      /fuel/packages/orm/classes/model/temporal.php

      /fuel/core/classes/model.php

    /fuel/packages/orm/classes/ 目录下类功能比较多,所以多数情况选择继承这个目录下的 model。

    在 /fuel/app/classes/model/ 目录下,可以直接新建,也可以创建一级目录再新建。注意所有的文件名都要小写(Linux)。

    一、创建 model 文件

      1、在 model 目录下新建 article.php,文件中 Article 类继承 OrmModel

      class Model_Article extends OrmModel{}

      2、在 model/new/ 目录下新建 tag.php,文件中 New 类继承 OrmModel_Soft

        oil 命令: php oil g model new/tag name:varchar --no-migration   或  php oil g model new_tag name:varchar --no-migration 

      class Model_New_Tag extends OrmModel_Soft{}

      3、在 model 目录下新建 category.php,文件中 Category 类继承 Model_Crud

      namespace Model;
    
      class Category extends Model_Crud{}

      4、在 model/new/ 目录下新建 test.php,文件中 Test 类继承 OrmModel_Temporal

      namespace ModelNew;
    
      class Test extends OrmModel_Temporal{}

      如果定义了 namespace 则在控制器中调用 Model 时,需要在 model 类名前面加命名空间或在文件最上面 use 命名空间下的类名。

      use ModelNewTest;
      class Controller_Article extends Controller
      {
          public function action_index()
          {
              $test = Test::forge();
            }
      }

    二、设置静态属性

      1、设置表名  protected static $_table_name = 'myarticles'; 

        如果数据库表名是 model 类名去掉 ‘Model_’ 后的复数形式,则不要要设置。

      2、设置主键  protected static $_primary_key = array('aid', 'bid'); 

        如果表中主键为 id 且只有 id ,则不需要设置

      3、设置表列  protected static $_properties = array('id', 'name', 'create_at', 'update_at'); 

        也可以设置列属性,数据类型 type、标签 label、验证规则 validation、input 类型 form、默认值 default 等。

      protected static $_properties = array(
            'id',
            'name' => array(
                'data_type' => 'varchar',
                'label' => 'Article Name',
                'validation' => array('required', 'min_length' => array(3), 'max_length' => array(20)),
                'form' => array('type' => 'text'),
                'default' => 'New article',
            ),
            'gender' => array(
                'data_type' => 'varchar',
                'label' => 'Gender',
                'form' => array('type' => 'select', 'options' => array('m' => 'Male', 'f' => 'Female')),
                'validation' => array('required'),
            ),
            'created_at' => array(
                'data_type' => 'int',
                'label' => 'Created At',
                'form' => array(
                    'type' => false, // this prevents this field from being rendered on a form
                ),
            ),
            'updated_at' => array('data_type' => 'int', 'label' => 'Updated At')
        );

      4、设置数据约束条件

      protected static $_conditions = array(
        'order_by' => array('id' => 'desc'),
        'where' => array('del_flg', '!=', 1),  
      );

      5、设置关联模型  protected static $_has_one, $_belongs_to, $_has_many, $_many_many 

        一对一、一对多、反向一对多、多对多

      6、设置数据库  protected static $_write_connection = 'articles_master_db'; protected static $_connection = 'articles_slave_db'; 

        在 /fuel/app/config/db.php 文件中配置数据库信息。

        如果数据库设置了主从服务器,实现读写分离,则 $_write_connection 为写数据库,$_connection 为读数据库。

        如果只有一个数据库,则用 $_connection 设置。

        如果有关联模型,则应保证相互关联的模型有相同的读写数据库。

      7、设置隐藏数据  protected static $_to_array_exclude = array( 'password', 'login_hash', 'salt‘, ); 

        返回查询的数据时,忽略敏感信息,比如用户密码、加密规则等。

      8、设置模型事件

      protected static $_observers = array(
            'OrmObserver_CreatedAt' => array(
                'events' => array('before_insert'),
                'property' => 'INS_DATE',
                'mysql_timestamp' => false,
            ),
            'OrmObserver_UpdatedAt' => array(
                'events' => array('before_update'),
                'property' => 'UPD_DATE',
                'mysql_timestamp' => false,
            ),
        );

        关于 observer ,后面会有详细介绍。

  • 相关阅读:
    包含min函数的栈
    量化交易系统的四个组成部分
    顺时针打印矩阵
    python正则表达式中re.M,re.S,re.I的作用
    二叉树的镜像
    树的子结构
    合并两个排序的链表
    反转链表
    命名元祖
    二叉树(二叉搜索树-AVL树-B树)
  • 原文地址:https://www.cnblogs.com/rendd/p/8968228.html
Copyright © 2020-2023  润新知