has one关联更新时的bug

浏览:649 发布日期:2014/08/27
3.1.3 - 致命 - 未处理
定义如下关联,其中条件是status=1,因为一个用户只有一条状态为status=1的profile:'Profile'=>array(
                'mapping_type'    =>HAS_ONE,
                'class_name'    =>'UserProfile',
                'mapping_name'  => 'Profile',
                'foreign_key'  =>'user_id',
                'condition'  =>'status=1',
                'mapping_fields' =>"number,status",
        ),
我在更新用户时,希望同时更新他的状态为1的profile,代码如下:$userInfo = array();
        $userInfo['name'] = 'name-related-has-one-save-1';
        $userInfo['numberr'] = 'number-related-has-one-save-1';
        $userInfo['loginName'] = 'loginName-related-has-one-save-1';
        $profileInfo = array();
        $profileInfo['number'] = 'number-related-has-one-save-1';
        $profileInfo['status'] = 1;
        $userInfo['Profile'] = $profileInfo;//手动添加关联数据
        $userModel = D('User');
        $result = $userModel->relation(true)->where(array('id'=>1))->save($userInfo);
但输出的sql是:UPDATE `cms_user` SET `name`='name-related-has-one-save-1',`numberr`='number-related-has-one-save-1',`loginName`='loginName-related-has-one-save-1' WHERE ( `id` = 1 )
UPDATE `cms_user_profile` SET `number`='number-related-has-one-save-1',`status`=1 WHERE ( status=1 )
看了下代码,在更新关联时,如果在定义关联的时候有指定条件,就会以定义中的条件作为where。这明显的逻辑错误吧。对于has one关联,而且我已经明确是更新一条具体的数据了,怎么也要把主表的id带上啊。

同时关联更新的逻辑也有问题:
在上面的代码中,如果把更新的代码改为下面的:$userModel->relation(true)->where('id<10')->save($userInfo);此时,id<10的User表数据被更新了,但此时按框架的逻辑,更新子表的sql就是:UPDATE `cms_user_profile` SET `number`='number-related-has-one-save-1',`status`=1 WHERE ( `user_id` = null )什么东东啊。

评论(
后面还有条评论,点击查看>>