+ -
当前位置:首页 → 问答吧 → 关联模型的问题

关联模型的问题

时间:2011-08-02

来源:互联网

MANY_TO_MANY的时候,如果前台传过来的关联字段值,不是array,只传了一个单独的值,会造成错误

比如我的User/Role关联模型
定义:
  1. protected $_link = array(
  2.                 'Role' => array(
  3.                         'mapping_type' => MANY_TO_MANY,
  4.                         'mapping_name' => 'Role',
  5.                         'class_name'   => 'Role',
  6.                         'foreign_key'  => 'user_id',
  7.                         'relation_foreign_key'=>'role_id',
  8.                         'relation_table'=>'hy_role_user',
  9.                 ),
  10.         );
复制代码
前台传值:

id:
username:
nickname:
password:
email:
......
role_id: 22

protected function opRelation($opType,$data='',$name='')
方法中:
  1. if(is_array($mappingData)) {
  2.                                         $ids = array();
  3.                                         foreach($mappingData as $vo){
  4.                                                 if(is_array($vo))
  5.                                                         $ids[]   =   $vo[$model->getPk()];
  6.                                         }
  7.                                         $relationId =   implode(',',$ids);
  8.                                     }
复制代码
这个地方有问题
因为前台传过来的role_id只有一个字符串值22
所以这里的$mappingData 解析后是:array('id'=>22)
foreach之后
$vo直接就是22了,不是array
所以$ids[] = $vo[$model->getPk()]; 这行代码有问题了,这样取的是$vo的length了

作者: lscgzwd   发布时间: 2011-08-02

我暂时把这行程序改了
改成:
  1. if(is_array($mappingData)) {
  2.                                         $ids = array();
  3.                                         foreach($mappingData as $vo){
  4.                                                 if(is_array($vo)){
  5.                                                         $ids[]   =   $vo[$model->getPk()];
  6.                                                 } else {
  7.                                                         $ids[]   =   $vo;
  8.                                                 }                                          
  9.                                         }
  10.                                         $relationId =   implode(',',$ids);
  11.                                     }
复制代码

作者: lscgzwd   发布时间: 2011-08-02