php 多表联查给id起别名,ThinkPHP 视图模型 同一张表多次关联 表别名问题

在使用ThinkPHP开发游戏公会系统时,遇到视图模型左联查询显示错误的问题。经过一系列尝试和排查,发现可能是由于ThinkPHP中表名重复导致的BUG。最终通过使用_table参数指定实际表名解决了问题,避免了表名冲突。
摘要由CSDN通过智能技术生成

ThinkPHP模型视图使用很便捷,但是这次开发游戏公会系统却遇到了一个问题,一个公用道具隶属于一个公会,而借用道具的角色也有自己隶属的公会,但可能并不是同一个公会.因此在做视图模型的时候,需要两次左外联公会表.问题由此产生,虽然我用了’_as’这个别名参数,但是无论如何操作,都只显示后面那个公会表.百度找不到相关材料,因此自己尝试修复,过程如下:

首先就是确认’_as’的效果,通过输出sql语句发现,是起效果的,的确在语句中显示了别名,但此时仍只能显示后一个公会表.

思考是否是我模型顺序问题? 尝试修改左外联表的顺序,结果直接报错说找不到某个条件,百度后发现也有同样问题,好像是个BUG?

弄到凌晨2点,因为还在做单位里疾控工作,这几天一直熬夜太累了实在难受,躺床上继续想…突然想到是否列别名也要都不一样? 尝试无果…

第二天起来记得好像以前解决过,查之前代码和笔记无果…简化视图模型,尝试加法,从零开始拼视图,然后发现自己做的数据里缺少了角色的ID信息,马上加上去,结果还是不行,BUG依旧(看来真的可能是BUG)

再次阅读官方文档,官档有提到’_table’这个参数,思考了下,感觉每次第一个公会表都被忽略,是否是ThinkPHP的方法里重复表名会过滤? 修改表名为自定义表名,然后用’_table’参数来指定实际表,果然就可以了,也不用再使用’_as’这个参数,我真的…

namespace Home\Model;

use Think\Model\ViewModel;

class PCHRUGViewModel extends ViewModel

{

public $viewFields = array(

'piecehistoryt' => array(

'PCH_Id',

'_type' => 'LEFT'

),

'guildt' => array(

'G_Id',

'_on' => 'piecehistoryt.G_Id=guildt.G_Id',

'_type' => 'LEFT'

),

'rolet' => array(

'R_Id',

'_on' => 'piecehistoryt.R_Id=rolet.R_Id',

'_type' => 'LEFT'

),

'roleguildt' => array(

'_table'=>'guildt',

'G_Id' => 'RG_Id',

'_on' => 'rolet.G_Id=roleguildt.G_Id'

)

);

}

我真聪明…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值