如何与Yii中用逗号分隔的多个ID建立关系


How to build relations to Multiple IDs separated by comma in Yii

我正在创建一个表单。表单的Certian字段使用复选框,可能会返回多个选项,我必须将所有这些ID存储在一个用逗号或分号分隔的字段中。

现在我想的是如何在Yii框架中建立与该记录的关系。通常我们使用

'groupName' => array(self::BELONGS_TO, 'Lookup', 'group'),
'p_cpu' => array(self::BELONGS_TO, 'Product', 'cpu'),

但是我将如何以以下方式完成

'p_additionalSoftwares' => array(self::BELONGS_TO, 'Product', 'additionalSoftwares'),

当附加软件包含类似于2.8 的东西时

由于这不是一个真正的带有外键的BELONGS_TO关系,因此不能使用Yii的内置函数。您可以基于CBaseActiveRelation或CActiveRelation为这种情况编写自定义关系,但我没有这方面的经验,但这可能是最干净的解决方案。

另一种选择是覆盖属性的get处理程序,比如*

public function getP_additionalSoftwares(){
  //Use value from database in attributes and split into array with primary keys
  $pks = explode(",",$this->attributes['p_additionalSoftwares']);
  //Query database
  $models = $this->findByPks($pks);
  return $models;
}

在您看来:

$model->p_additionalSoftwares

应该返回一个模型数组,如关系。

注意:这可能会影响性能,因为您可能会获得数据库的大量子请求,因为这些记录都是延迟加载的。

**代码未测试*