thinkphp中模型的概念问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp中模型的概念问题相关的知识,希望对你有一定的参考价值。

因为以前是用CI的,忽然转来THINKphp有点不习惯。

因为以前CI里,我是将model做为执行和方法封装用,而控制器就象触发器一样。

但现在TP里,控制器好像完全只能用于处理DB。

我建了一个模型

<?php

class isonlineModel extends Model

private $username,$uid,$ACtype,$lasttime;

/**
* 检查管理员是否在线,如果不在线,自动跳转到登陆控制器
*/
public function __construct()
import("Think.Util.Session"); //载入session类
if(empty($this->username)
$this->username = Session::get('konaAdminUsername');
if(empty($this->uid))
$this->uid = Session::get('konaAdminUid');
if(empty($this->ACtype))
$this->ACtype = Session::get('konaAdminACtype');

if($this->is_online()===false)
$this->redirect('admin:login');
else
//跳到main管理器
$this->redirect('admin:index');




其实就是验证管理员是否登陆,如果是,就到管理界面,否则就到登陆。

这是每一个控制器都必须引入的(放在析构函数那里)。

以下是控制器代码:

<?php
/**
* 后台首页控制器
* @create date : 2010-4-17 22:18
* @update date : 2010-4-17 22:18
*/
class indexAction extends Action

public function __construct()
$a = M('isonline');
$a->is_online();


错误提示为:
Model:is_online您所请求的方法不存在!

是不是model里不能这样用?=。=

那起不是要巨增控制器的文件长度!?

我觉的你对thinkphp的model理解不大对,tp的model和你说的ci的model是不一样的
tp里的model是用来封装数据库模型的,而你要实现的是控制用户请求,这已经属于控制器的范畴了,所以不能这样$a = M('isonline');而应该是写一个全局的action,比如globalAction,让它继承tp的action,然后在 globalAction的_initialize()方法中session判断,

然后所有的需要权限判断的Action都继承globalAction,而不是系统的acton,这样每次实例化action的时候都会先检查用户session

我是个初学者,刚接触thinkphp没些天,理解的也不是很透彻,但tp源码就是这么写的,系统Action的构造函数:
public function __construct()

//实例化视图类
$this->view = Think::instance('View');
//控制器初始化
if(method_exists($this,'_initialize'))
$this->_initialize();

它会检查是否有_initialize方法。。。,有的话就调用initialize
参考技术A 没必要这么做的. 况且您的isonlineModel中本来就没有is_online函数.
其实你可以在ThinkPHP的Action.class.php中添加一个初始化函数就可以了.
或者使用应用程序插件,

thinkphp3.2之模型(M层)

最近学习了php框架thinkphp,回头总结了些学习心得知识,希望对大家有帮助

 

 

1、模型的概念:

     模型(Model)是 ThinkPHP 中一个很重要的概念,粗略的理解模型就是与数据库交互信息进行curd操作的过程,与之有关的还包括模型的定义与实例化。

2、模型的实例化:

  1)、实例化基础模型 (无需正式的M层存在,是thinkphp提供好的,模型的基类,实现了基本的CURD)

   1、$对象 = new  Model("去掉前缀的表名")

快捷创建:M

   2、$对象 = M("去掉前缀的表名") 

 

2)、实例化自定义模型 (实际通过自己在项目目录/Lib/model/)

  (1)模型的命名和命名控制器的命名相似  “表名”+model.class.php

 

  (2)创建模型类时必须继承Model这个基类

 

  (3)模型类被本身可以不定义方法或者属性

 

      (4)创建模型类对象

         1、$对象名 = new  XXXModel();

快捷创建:D   用D创建的好处是,不会每次都创建,会自动的判断如果有该类的对象,那么就不会在创建,会返回有的对象

         2、$对象名 = D("XXX");

 

   (5) 实例化多个模型(实例化一个自定义模型的时候同时附带着实例化另一个模型)

   $对象名 = new  XXXModel("其它模型的名称(‘User’)");

   注意:此时查询的数据库数据是来自User表的数据

 

        $对象名 = M("XXXModel:USer");

 

 

   (6) 实例化空模型(在实例化的时候不知道实例化那个模型,直接实例化一个空的模型)

   $对象名 =  new Model();

 

    该对象可以使用原始的sql语句    $对象名->query(“原生sql语句”);

 

 

 

3、数据库操作与查询(区间查询,统计查询,定位查询,原生查询)

     1)

连贯操作中,如where group   order   limit select  等中select一定要在最后一个出现

       

      2)

1、select()返回值二维数组   等于findAll() 

    建议使用select()

 

           2、field查询指定字段(连贯方法之一)

  field("username","password")->select();

 

           3、find()  只能查询一条记录   默认是根据主键进行查询,也有数组条件,但是注意的是该数组条件是连贯操作的表达式:

如果条件是id的话:可以直接写条件,默认就是id为条件:find(id=2)

$conditon["order"] ="id  desc";

$conditon["where"] ="username = ‘wjc‘";

 

            4、getByUsername("admin")

   

           5、getfield(字段1,字段2,字段3,spe分隔符)

用法:

               getField($field,$sepa=null)

参数:

                field(必须):要获取的字段字符串(多个用逗号分隔)

 

sepa(可选):字段数据间隔符号,如果是 NULL返回数组为数组。默认为null。

 

注:如果field是多个字段,返回数组。数组的索引是第一个字段的值,sepa为null则返回二维数组。

 

区间查询:

          $condition["id"]=array(array("gt",12),array("lt",15),"or");

         or是两个查询的关联条件,默认不写为and

          $arr= $user ->where($condition)->select();

统计查询:

     "统计用户名的个数:". $user->count("username")."<br>";

        "统计最大的id:".$user->max("id")."<br>";

        "统计最小的id:".$user->min("id")."<br>";

        "统计id的和:".$user->sum("id")."<br>";

        "统计id的平均值:".$user->avg("id")."<br>";

 

定位查询:

这些查询需要高级模型的支持:AdvModel

自定义高级模型:class UserModel  extends AdvModel()

自动切换为高级模型:switchModel(‘Adv’)->first()

        dump($user->first());

        dump($user->last());

        dump($user->getN(index));1,2,3,4,5,6

 

原生查询:

    query() 方法是用于 SQL 查询操作,和select()方法一样返回符合查询条件的数据集。

     execute()方法用于更新和写入数据的 SQL 操作(注:非查询操作,无返回数据集),返回影响的记录数。

以上是关于thinkphp中模型的概念问题的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp5中的model模型层,有啥用

什么是THINKPHP 和 MVC的概念

thinkphp 模型类的作用?

php thinkphp 现在有模型关联问题

thinkphp模型查询加必要条件

thinkphp在关联模型中三表级联查询