konakona
[原创]ThinkPHP 使用 __TABLE__ 关键字调用不同表
[原创]ThinkPHP 使用 __TABLE__ 关键字调用不同表

首先,很多人都不知道这个用法……

包括我用了ThinkPHP快1年半了才发现。

 

我们先来看看手册中唯一提到了__TABLE__的地方。

http://blog.crazyphper.com/wp-content/uploads/2012/09/QQ图片20120905103316-300x89.jpg

在使用THINKPHP时,当需要多表查询时,我们会用各种不同的方式去实现表前缀+表名的重复步骤。

刚刚无意中在join()中又试了试__TABLE__。

一直以来我以为这个关键字跟__URL__ 、 __APP__一样是固定名称、固定值的TP常量。

我胡乱调试了一下,我先是写了__TABLE__.aaa  发现被解析为了 前缀+aaa ,感觉奇怪,怎么不是当前表名了?

我又稍微调了一下,才发现下面这样的用法…

$model->join('__ADMIN__ a ON __MSG_LIST__.admin_id = a.id');

其中__ADMIN__代表前缀+admin表,而__MSG_LIST__代表前缀+msg_list表。
但是这个写法只有join()支持。当你把__ADMIN__放到field()中时,又无法解析了。
where()我还没有试过。
另外__TABLE__只有query()会解析成当前表。

所以最终,一条CURD我还是写成了:

$this->curModel->field(C('DB_PREFIX')."msg_list.*,a.username")->join('__ADMIN__ a ON __MSG_LIST__.admin_id = a.id')->where($map)->limit($page->firstRow.','.$page->listRows)->select()

还是很不方便啊!!!希望TP强化此功能!并且丰富手册、文档,让更多的开发者知道其实可以这样用。这样真的方便了好多。

赞赏
首页      程序开发      PHP      [原创]ThinkPHP 使用 __TABLE__ 关键字调用不同表
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

konakona

[原创]ThinkPHP 使用 __TABLE__ 关键字调用不同表
在一些需要多表查询的地方,我们会用各种不同的方式去实现表前缀+表名的重复步骤。 我们都不知道原来还可以这样做。 希望ThinkPHP官方能尽快丰富手册、文档,让更多的开发者知道其实可以这样用。这样真的方便了好多。
扫描二维码继续阅读
2012-09-05