【问题标题】:yii 1 relation not working in CGridViewyii 1 关系在 CGridView 中不起作用
【发布时间】:2015-09-21 03:18:30
【问题描述】:

我正在尝试获取 companies 表具有主键 companyIDdivision 表具有外键 companyID 的关系,我在 where 子句中需要的是 WHERE companies.companyID = division.companies 我的模型中的关系是:

public function relations()
    {
        return array(
            'company' => array(self::BELONGS_TO, 'Companies', 'CompanyID'),
        );
    }

我的Model->search()函数是

public function search()
{
    $criteria=new CDbCriteria;
    $criteria->with ='company';
    $criteria->compare('company.CompanyID', $this->CompanyID, true );
    $criteria->compare('DivisionID',$this->DivisionID, true);
    $criteria->compare('CompanyID',$this->CompanyID, true);
    $criteria->compare('Name',$this->Name,true, true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

而我的admin.php 观点是:

 <?php
$this->breadcrumbs = array(
    'Divisions' => array('index'),
    'Manage',
);

$this->menu = array(
    array('label' => 'List Divisions', 'url' => array('index')),
    array('label' => 'Create Divisions', 'url' => array('create')),
);

   ");
?>

<div class="row">
    <?php
    $this->renderPartial('_dropdownfilter', array(
        'model' => $model,
    ));
    ?>
</div><!-- end dropdown partial form -->
<?php
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'divisions-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        'CompanyID',
        'DivisionID',
        'Name',
        array(
            'class' => 'CButtonColumn',
        ),
    ),
));
?>

【问题讨论】:

    标签: mysql gridview yii yii-relations


    【解决方案1】:

    您需要将together=true 添加到您的条件中。

    $criteria->together = true;
    

    它将加入查询。关于延迟加载的一些信息http://www.yiiframework.com/wiki/527/relational-query-lazy-loading-and-eager-loading-with-and-together/

    【讨论】:

      【解决方案2】:

      如果要显示公司名称,只需在视图中执行此操作即可。不要更改模型->搜索()中的任何内容。 大批( '名称'=>'名称', 'value'=>$model->company->name //这里name是company表中的列名。 ),

      【讨论】:

        【解决方案3】:

        在您的 gridview 代码中进行以下更改。

        $this->widget('zii.widgets.grid.CGridView', array(
            'id' => 'divisions-grid',
            'dataProvider' => $model->search(),
            'filter' => $model,
            'columns' => array(
                array(
                    'name' => 'companies',//fied from division table which refers to companyId from company table.
                    'header' => 'Company',
                    'value' => '$data->company->company_name'
                ),
                'CompanyID',
                'DivisionID',
                'Name',
                array(
                    'class' => 'CButtonColumn',
                ),
            ),
        ));
        

        在你的模型中->search()

        public function search()
        {
            $criteria=new CDbCriteria;
            $criteria->with ='company';
            $criteria->compare('company.company_name', $this->companies, true );
            $criteria->compare('DivisionID',$this->DivisionID, true);
            $criteria->compare('CompanyID',$this->CompanyID, true);
            $criteria->compare('Name',$this->Name,true, true);
        
            return new CActiveDataProvider($this, array(
                'criteria'=>$criteria,
            ));
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多