Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于活动记录关系的组合表Yii模型_Yii - Fatal编程技术网

基于活动记录关系的组合表Yii模型

基于活动记录关系的组合表Yii模型,yii,Yii,我得到了模型类Contactindiv,其中包含关系和搜索,如下所示 public function relations() { return array( 'contactlogs' => array(self::HAS_MANY, 'Contactlog', 'ContactIndivID'), ); } public function search() { $criteria=new CDbCriteria; $criteria-&g

我得到了模型类Contactindiv,其中包含关系和搜索,如下所示

public function relations()
{
    return array(

    'contactlogs' => array(self::HAS_MANY, 'Contactlog', 'ContactIndivID'),

    );

}

public function search()
{
    $criteria=new CDbCriteria;

    $criteria->compare('ContactIndivID',$this->ContactIndivID);
    $criteria->compare('PersonalTitle',$this->PersonalTitle,true);
    $criteria->compare('NameLast',$this->NameLast,true);
    $criteria->compare('NameMiddle',$this->NameMiddle,true);
    $criteria->compare('NameFirst',$this->NameFirst,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
当前页面以可搜索的CGridView格式显示数据

我的目标是将关系中的“联系人日志”组合到模型中,以便在GridView中以可搜索的方式显示在页面上。基本上为每个联系人添加一个可搜索的GridView列,显示他们的联系人日志

提前感谢您的帮助

对于您的第一个目标(在模型中显示contactlogs),您可以在主模型中编写一个getter。这取决于您想在gridview列中显示什么,但您可以使用以下内容:

public function getContacts()
{
    $names = array();
    foreach($this->contactlogs as $log)
        $names[] = $log->name;
    return implode(', ', $names);
}
现在,您可以使用
联系人
,就好像它是“Contactindiv”型号的常规属性一样

对于第二个目标,可以添加一个公共属性,该属性将包含筛选器值,并且可以在
search()
方法中使用:

public $contactFilter;
public function search()
{
    // ...
    if(!empty($this->contactFilter)) {
        $criteria->with = array(
            'contactlogs' => array(
                'joinType' => 'INNER JOIN',
                'on' => 'contactlogs.name = :name',
             ),
        );
        $criteria->params[':name'] = $this->contactFilter;
    }
    // ..
}
现在,您只需在gridview的
配置中添加以上所有内容:

array(
    'name' => 'contacts',
    'filter' => CHtml::activeTextField($model, 'contactFilter'),
)
请注意,我写这篇文章的大部分都是从我的头顶开始的,不能完全测试它。但希望它能让你明白基本概念。请让我知道它是否有效。

对于您的第一个目标(在模型中显示联系人日志),您可以在主模型中编写一个getter。这取决于您想在gridview列中显示什么,但您可以使用以下内容:

public function getContacts()
{
    $names = array();
    foreach($this->contactlogs as $log)
        $names[] = $log->name;
    return implode(', ', $names);
}
现在,您可以使用
联系人
,就好像它是“Contactindiv”型号的常规属性一样

对于第二个目标,可以添加一个公共属性,该属性将包含筛选器值,并且可以在
search()
方法中使用:

public $contactFilter;
public function search()
{
    // ...
    if(!empty($this->contactFilter)) {
        $criteria->with = array(
            'contactlogs' => array(
                'joinType' => 'INNER JOIN',
                'on' => 'contactlogs.name = :name',
             ),
        );
        $criteria->params[':name'] = $this->contactFilter;
    }
    // ..
}
现在,您只需在gridview的
配置中添加以上所有内容:

array(
    'name' => 'contacts',
    'filter' => CHtml::activeTextField($model, 'contactFilter'),
)

请注意,我写这篇文章的大部分都是从我的头顶开始的,不能完全测试它。但希望它能让你明白基本概念。请让我知道它是否有效。

谢谢Michael,我会尝试一下并让你知道。还在努力。这无疑帮助我朝着正确的方向前进。再次感谢。谢谢迈克尔,我会试一试,让你知道。还在努力。这无疑帮助我朝着正确的方向前进。再次感谢。