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 )什么东东啊。