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'
)
);
}
我真聪明…