thinkphp如何关联查询(thinkphp 关联查询)-编程知识网

thinkphp 3.2关联查询

首先,我们来盲定义几个表!

1、用户表:

创建表“用户”(

` id ‘ int(11)NOT NULL auto _ increment,

` username ‘ varchar(20)默认为NULL,

` password ‘ varchar(20)默认为NULL,

主键(` id `)

)ENGINE=InnoDB AUTO_INCREMENT=4默认字符集=utf8

2.用户信息表:用户信息:

创建表` userinfo `(

` id ‘ int(11)NOT NULL auto _ increment,

` user_id` int(11)不为空,

` phone ‘ varchar(22)默认为NULL,

` addirss` varchar(150)默认为NULL,

` age ‘ varchar(10)默认值为NULL,

` sex ‘ varchar(10)默认为NULL,

主键(` id `)

)ENGINE=InnoDB AUTO_INCREMENT=4默认字符集=utf8

3.用户申请表:

创建表“userapp ”(

` id ‘ int(11)NOT NULL auto _ increment,

` user_id` int(11)不为空,

` app_name` varchar(20)默认为NULL,

` app_info ‘文本,

主键(` id `)

)ENGINE=InnoDB AUTO_INCREMENT=16默认字符集=utf8

说说三块表的关系吧,

用户表(user)和(userinfo)的关系:每个用户只对应一个用户信息,所以是一对一的关系HAS_ONE。

用户表(user)和(userapp)的关系:每个用户可以对应多个应用,所以是一对多关系HAS_MANY。

我们想达到一个效果,就是查询它对应的每个用户的信息,以及它所有的应用。下面就来看看怎么实现吧!

首先,建立两者之间的对应关系:

在thinkphp中,变量$_link用于定义关系,例如:public $ _ link = array();就写他们的通信吧!

首先建立控制器:UserAction.class.php。

在构建相应的模型:UserModel.class.php时,这个模型必须继承RelationModel类。

类用户模型扩展关系模型{

public $_link = array(

//一对一的关系

'userinfo & # 39= & gt数组(

'mapping _ type & # 39= & gtHAS_ONE,//被定义为一对一的关系

'class _ name & # 39= & gt'Userinfo & # 39

),

//一对多关系

'userapp & # 39= & gt数组(

'mapping _ type & # 39= & gtHAS_MANY,//定义为一对多关系

'class _ name & # 39= & gt'Userapp & # 39,//对应模型的类名

'foreign _ key & # 39= & gt'user _ id & # 39,//对应的外键ID

'mapping _ name & # 39= & gt'Userapp & # 39,//获取值的名称

//'映射_顺序& # 39;= & gt'创造时间desc & # 39;,

)

);

}

就这么简单。我们来看看如何查询数据!

写在控制器里,也就是在动作里。

类UserAction扩展操作{

//一对一一对多联查

公共函数索引(){

$ User = D(& quot;用户& quot);

$ u = $ User-& gt;关系(真)-& gt;findAll();

//dump($ u);

$ this-& gt;分配(& # 39;u & # 39,$ u);

$ this-& gt;显示(& # 39;index & # 39);

}

}

好了,就这样吧!

补充一点:需要建立userinfo表和userapp的模型名,例如:UserInfo:UserinfoModel.class.php。

怎么样配置thinkphp与本地mysql和sqlserver同时连接俩个数据库?

thinkphp 同时连接两个数据库的配置方法如下:

1、在Db.class.php脚本文件里面的类增加一个魔术方法__get(),写法如下:public function __get($propertyName){ return $this->$propertyName;}这个方法是用来访问类中protected $config成员属性用的。有的人可能会说,直接把protected改成public岂不是更好。这样只解决了基类的问题,假如,子类也同样进行了受保护,那要你更改更多的文件,这是我们做IT程序员非常不愿意看到的事情。

2、在Model.class.php中的getTableName()方法更改如下:$tablepre = $this->db->config;if(empty($this->trueTableName)) {$tableName??= empty($tablepre) ? $this->tablePrefix : $tablepre;if(!empty($this->tableName)) {$tableName .= $this->tableName;}else{$tableName .= parse_name($this->name);}$this->trueTableName? ? =? ?strtolower($tableName);}return (!empty($this->dbName)?$this->dbName.’.’:”).$this->trueTableName;这样就完成了多库自由切换时,导致的表前缀问题。/*******************面向对象PDO连接方式*********************/’DB_TYPE’ => ‘PDO’, // 数据库类型’DB_DSN’ => ‘mysql:host=localhost;dbname=master’, // DSN连接。’DB_USER’ => ‘root’, // 数据库用户名’DB_PWD’ => ‘123456’, // 数据库密码’DB_PORT’ => ‘3306’, // 数据库端口’DB_PREFIX’ => ‘g_’, // 数据表前缀’DB_CHARSET’ => ‘utf8’, // 数据库编码默认采用utf8

thinkphp 3.2.3在3.2.2基础上有哪些新特性?

3.2.3 主要更新

数据库驱动完全用PDO重写;

支持通用insertAll方法;

改进参数绑定机制;

主从分布式数据库连接改进;

对Mongo的支持更加完善;

模型类的诸多增强和改进;

增加聚合模型扩展;

支持复合主键;

多表操作的支持完善;

模型的CURD操作支持仅获取SQL语句而不执行;

增加using/index/fetchSql/strict/token连贯操作方法;

模型类的setInc和setDec方法支持延迟写入;

I函数增加变量修饰符和正则检测支持;

支持全局变量过滤和Action参数绑定的变量过滤;

修正可能的SQL注入漏洞;

支持全局路由定义;

增加插件控制器支持;

增加对全局和模块的模板路径的灵活设置;

日志目录分模块存放;

增加memcache Session驱动;

改进session函数的数组操作;