【问题标题】:How to build relations to Multiple IDs separated by comma in Yii如何在 Yii 中建立与多个用逗号分隔的 ID 的关系
【发布时间】:2011-06-27 03:59:08
【问题描述】:

我正在创建一个表单。表单的 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 的内容时

【问题讨论】:

  • 这是必备解决方案吗?我想我会将这种结构转换为更灵活的结构。像每个附加软件一样,在softwares 表中分隔行。以及何时与此表建立关系。米?
  • 我认为您需要稍微澄清一下问题并指定您正在谈论的表格-我不确定您的确切问题-如果您没有在 Product 表中添加附加软件' t 需要关系,如果它们在不同的关系中,请使用带有 product_id 的关系将它们联系在一起。我也同意 @briiC.lv 的观点,即您通常希望创建查找表来存储各个值。

标签: php mysql database relational-database yii


【解决方案1】:

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

另一种选择是覆盖属性的获取处理程序,例如*

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

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

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

**未经测试的代码*

【讨论】:

    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 2021-10-01
    • 2015-07-30
    • 2012-07-26
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多