FuelPHP 系列(三)

框架封装好的 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 类继承 Orm\Model

  class Model_Article extends Orm\Model{}

  2、在 model/new/ 目录下新建 tag.php,文件中 New 类继承 Orm\Model_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 Orm\Model_Soft{}

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

1  namespace Model; 2 3  class Category extends \Model_Crud{}

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

1  namespace Model\New; 2 3  class Test extends Orm\Model_Temporal{}

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

1  use Model\New\Test; 2  class Controller_Article extends \Controller 3  { 4   public function action_index() 5   { 6   $test = Test::forge(); 7 } 8  }

二、设置静态属性

  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 等。

1  protected static $_properties = array( 2 'id', 3 'name' => array( 4 'data_type' => 'varchar', 5 'label' => 'Article Name', 6 'validation' => array('required', 'min_length' => array(3), 'max_length' => array(20)), 7 'form' => array('type' => 'text'), 8 'default' => 'New article', 9 ), 10 'gender' => array( 11 'data_type' => 'varchar', 12 'label' => 'Gender', 13 'form' => array('type' => 'select', 'options' => array('m' => 'Male', 'f' => 'Female')), 14 'validation' => array('required'), 15 ), 16 'created_at' => array( 17 'data_type' => 'int', 18 'label' => 'Created At', 19 'form' => array( 20 'type' => false, // this prevents this field from being rendered on a form 21 ), 22 ), 23 'updated_at' => array('data_type' => 'int', 'label' => 'Updated At') 24 );

  4、设置数据约束条件

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

  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、设置模型事件

1  protected static $_observers = array( 2 'Orm\Observer_CreatedAt' => array( 3 'events' => array('before_insert'), 4 'property' => 'INS_DATE', 5 'mysql_timestamp' => false, 6 ), 7 'Orm\Observer_UpdatedAt' => array( 8 'events' => array('before_update'), 9 'property' => 'UPD_DATE', 10 'mysql_timestamp' => false, 11 ), 12 );

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )