【问题标题】:Yii Model CGridView including column with Yii-User Profile Field dataYii 模型 CGridView 包括带有 Yii 用户配置文件字段数据的列
【发布时间】:2026-01-13 06:40:01
【问题描述】:

我希望在模型中为相关模块的模型启用搜索条件。 这是一个解释我的意思的例子:

  • 我有一个包含“user_id”的“产品”模型。
  • 在 Yii 用户中,我创建了一个名为“品牌”的自定义配置文件字段。
  • 我的产品模型的索引视图中有一个 CGridView(具有搜索/过滤功能),其中列出了所有产品。
  • 我想将“品牌”配置文件字段(这是使用 Yii-User 制作的自定义配置文件字段)添加到 CGridView 列,允许人们按“品牌”过滤和搜索网格视图。

我将以下代码添加到我的产品模型关系中:

public function relations()
{
            Yii::import('application.modules.user.models.*');
    Yii::app()->getModule('user');
    return array(
        'user' => array(self::BELONGS_TO, 'Users', 'user_id'),
    );
}

然后将其添加到产品模型的搜索条件中:

$criteria->compare('user.brand', $this->user->profile->brand, true);

然而,这并没有产生积极的结果。

我不确定我的方向是否正确。有人知道怎么做吗?

【问题讨论】:

    标签: php yii yii-extensions cgridview


    【解决方案1】:

    为什么你把下面几行放在'relations()'函数中?

    Yii::import('application.modules.user.models.*');
    Yii::app()->getModule('user');
    

    您需要将“品牌”作为公共或私有属性放在“产品”模型上。该属性不持久,仅用于获取过滤器表单值。

    然后像这样使用:

    $criteria->compare('user.brand', $this->brand, false);
    

    您可能需要将 'brand' 属性放在 'rules()' 上,使用 'on'=>'search' 放在 array() 上。

    【讨论】: