Thinkphp关联模型使用field或getField函数
2016-04-08 21:24
661 查看
最近写个人项目,遇到个小坑——Thinkphp关联模型使用field或getField函数时必须包含relation_foreign_key,否则无法关联。
话不多说,看代码:
此时var_dump($projectInfo)的结果是
查看thinkphp自带的调试工具,发现sql是这样的:
刚开始还以为是$_link中那个地方写错了,找了半天,后来想想应该是没有关联上,在field函数中加上relation_foreign_key就行了(本文中是id),修改后的查询代码如下:
此时thinkphp的调试工具:
getField函数是跟field函数同理的,就不再赘述。
总结:
使用框架确实开发速度快了很多,但不可避免的也会有些小坑,找出来解决掉还是挺有意思的。目前,还没仔细看thinkphp关于这部分的源码,如能改进将会把思路和代码后补上。
水平有限,欢迎指正~
话不多说,看代码:
<?php namespace Project\Model; use Think\RelationModel; class ProjectModel extends RelationModel protected $_link = array( // 与ProjectList关联(一对多:HAS_MANY) 'List' => array( 'mapping_type' => self::HAS_MANY, 'class_name' => 'ProjectList', 'mapping_name' => 'List', 'foreign_key' => 'pid', 'relation_foreign_key' => 'id', 'mapping_fields' => 'id,title', ), // 与ProjectCard关联(一对多:HAS_MANY) 'Card' => array( 'mapping_type' => self::HAS_MANY, 'class_name' => 'ProjectCard', 'mapping_name' => 'Card', 'foreign_key' => 'pid', 'relation_foreign_key' => 'id', 'mapping_fields' => 'id,list_id,title,order', ), ); public function getProject($id) { //省略其余代码 $projectInfo = $this->relation(array('List', 'Card'))->field('title,summary')->where(array('id' => $id, 'status' => 1))->find(); //省略其余代码 } }
此时var_dump($projectInfo)的结果是
array (size=4) 'title' => string '123123' (length=6) 'summary' => string '1231231231231231231' (length=19) 'List' => array (size=0) empty 'Card' => array (size=0) empty
查看thinkphp自带的调试工具,发现sql是这样的:
刚开始还以为是$_link中那个地方写错了,找了半天,后来想想应该是没有关联上,在field函数中加上relation_foreign_key就行了(本文中是id),修改后的查询代码如下:
$projectInfo = $this->relation(array('List', 'Card'))->field('id,title,summary')->where(array('id' => $id, 'status' => 1))->find();
此时thinkphp的调试工具:
getField函数是跟field函数同理的,就不再赘述。
总结:
使用框架确实开发速度快了很多,但不可避免的也会有些小坑,找出来解决掉还是挺有意思的。目前,还没仔细看thinkphp关于这部分的源码,如能改进将会把思路和代码后补上。
水平有限,欢迎指正~
相关文章推荐
- ContentProvider简单用法
- PHP单文件上传的过程化函数封装
- PHP文件上传的实现及其介绍
- PHP-006
- LAMP之phpadmin
- yii小物件详解
- yii小物件前端表单集合
- busybox中tftp服务器使用命令
- LAMP之mysql+php
- scan & ATPG
- Eclipse的PHP插件PHPEclipse安装和使用
- php中 如何生成jsonp数据接口及如何调用?
- 怎么使用PHPMailer实现邮件的发送??
- php中xml数据接口如何生成及调用
- PHP冒泡排序
- When install ”matplotlib” with ”pip”, if you get the following error, it means the “freetype” and “png” libraries needed by matplotlib are not installed:
- php中json数据接口创建及调用
- php三种接口(json、XML、jsonp)的生成与调用
- 关于php插件pdo_mysql的安装
- php中的字符串操作