我正在创建一个表单。表单的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
应该返回一个模型数组,如关系。
注意:这可能会影响性能,因为您可能会获得数据库的大量子请求,因为这些记录都是延迟加载的。
**代码未测试*