您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp3.2.1学习笔记-模型初步(下)
发布时间:2017-09-19 10:56:14编辑:雪饮阅读()
自定义模型,也可以使用简写,如:
$user=D("user");
使用D方法比直接使用模型类更加智能,如果在home的model中没有找到自定义user模型则会去公共模块目录common->model中去找,如果还是找不到则直接实例化基类Model类。
继承后的类中如果需要显式的声明构造方法,则构造方法中必须先调用其父类的构造方法。然后再写本类的构造方法,否则继承就无意义了(覆盖了父类的构造方法)。
D方法还可以跨模块调用模型:
在admin模块中的model目录中建立一个user模型:
<?php
namespace Admin\Model;
use Think\Model;
class UserModel extends Model{
public function __construct(){
parent::__construct();
echo "my is admin model";
}
}
?>
然后home模块的方法中这样调用:
$user=D("Admin/User");
原生sql查询:
$user=M("");
$user->query("select * from think_user");
M一个空的表,或new Model一个空的都可以
字段缓存:
字段缓存的好处,如果有相同的查询条件被重复查询,使用了字段缓存就可以在下次查询时不用直接进入数据库中取出了。
调试模式下,字段缓存是自动关闭的状态。
对于原生sql查询的方式字段缓存貌似没有生效。
当调试模式关闭后字段缓存就会生效,此时方法中执行如下代码:
$user=M("user");
$list=$user->select();
就会在应用目录下\Runtime\Data目录中生成一个_fields文件夹,该文件夹中存储字段缓存信息。
同时页面调试中可以观察到sql项中并未有任何sql执行的信息。
如果在关闭了调试模式下,还要继续关闭字段缓存就在配置文件中配置如:
'DB_FIELDS_CACHE'=>false,
字段缓存后数据表中若有新增数据,那么新增的数据可以被查到,但是若有新增字段则无法查到。
如下获取了数据表的所有字段,但由于缓存的原因,数据表新增了字段无法获取到最新的字段信息。
$user=M("user");
$list=$user->getDbFields();
echo "<pre>";
print_r($list);
echo "</pre>";
此时只要把应用目录下\Runtime\Data目录中_fields文件夹中的字段缓存文件删除就可以获取到最新字段信息了。
手动定义字段缓存:
在自定义模型中定义如下:
<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
protected $fields=array('id','name','_pk'=>'id');
public function __construct(){
parent::__construct();
echo "my is home model";
}
}
?>
其中_pk是指定主键字段
自定义字段缓存在使用的时候要用D方法,如下:
$user=D("user");
$list=$user->getDbFields();
echo "<pre>";
print_r($list);
echo "</pre>";
自定义字段缓存不会生成在刚才那个缓存目录中。
上面的手动自定义字段缓存的数组还可以更具体,如:
protected $fields=array(
'id','name','_pk'=>'id',
'type'=>array('id'=>'int','name'=>'varchar'),
);
type定义每个字段的类型,可以永远字段验证。
手动定义字段缓存的好处:提高性能,减少io开销,默认的字段缓存以生成文件来实现的,对io有影响。性能不佳。
关键字词:thinkphp3.2.1,模型