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

Php 如何在Yii中建立与多个以逗号分隔的ID的关系,php,mysql,database,relational-database,yii,Php,Mysql,Database,Relational Database,Yii,我正在创建一个表单。表单的Certian字段使用复选框并可能返回多个选项,我必须将所有这些ID存储到一个由逗号或分号分隔的字段中 现在我想知道的是如何在Yii框架中建立与该记录的关系。 通常我们使用 'groupName' => array(self::BELONGS_TO, 'Lookup', 'group'), 'p_cpu' => array(self::BELONGS_TO, 'Product', 'cpu'), 但是,我将如何按照以下方式来做呢 'p_additional

我正在创建一个表单。表单的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的内容时,因为这不是与外键的真正关系,所以不能使用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
应返回一个模型数组,如关系

注意:这可能会影响性能,因为您可能会收到大量对数据库的子请求,因为所有记录都是延迟加载的


**代码未测试*

这是必备的解决方案吗?我想我会把这个结构转换成更灵活的smth。与每个附加软件一样,在
软件
表中分隔行。以及何时与此表建立关系。m?我想你需要澄清一下这个问题,并具体说明你在谈论什么表——我不确定你的确切问题——如果产品表中有其他软件,你不需要关系,如果它们在不同的表中,使用与产品id的关系将它们联系在一起。我也同意@briiC.lv的说法,即您通常希望创建查找表来存储各个值。