benlee7777 2012-06-18 13:09:59 4895次浏览 3条回复 0 0 0

今天碰到一个问题 现在有两个表,user表和info表,我要查询用户的email,而email字段在info表中,于是我就在userModel中写了个relations 'info'=>array(self::BELONGS_TO,'Info','userid')

其中user的主键为id,info表中的主键为userid

controller中调用语句User::model()->with('info')->findAll();出错,错误信息是这样的: AR类 "User" 的关联 "info" 设定了一个无效的外键 "userid" 是不是在关联表时必须设置外键?还是我的relations写的有错误? 请大侠指教一下。 (解决办法请看二楼)

  • 回复于 2012-06-18 14:57 举报

    已解决,谢谢7415106群众的舰长四弟的帮助
    可以不通过外键设置,使用on也可,具体的语句如下

    public function relations()
    {
        return array(
            'info'=>array(self::HAS_ONE,'Userinfo','','on'=>'ui.userid=t.id','alias'=>'ui'),
        );
    }
    

    controller里面使用$model->info->email即可。

  • 回复于 2012-06-19 09:34 举报

    学习了!

  • 回复于 2012-06-19 15:58 举报

    学习了,不过我感觉,问题虽然解决,但,原理我们必须要搞清楚,否则下次出现,要么还是不会,要么还是死板硬套

    我感觉,根据你的表结构,明显是user和info表是一对一的关系,而不是user表属于info表,问题不是出现在reations后面的参数上,而是出现在self::belogn_to这里,你把belogn_to换成has_one,其它的都不用改,应该就可以的……

    建立relations的时候,无需定义外键,还是好好看看手册吧……

您需要登录后才可以回复。登录 | 立即注册