FahadAkram
FahadAkram

Reputation: 475

yii 1 relation not working in CGridView

I am trying to get relation where companies table have primary key companyID and division table have Foreign key companyID , what I need in where clause is WHERE companies.companyID = division.companies relation in my model is :

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

My Model->search() function is

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,
    ));
}

and my admin.php view is:

 <?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',
        ),
    ),
));
?>

Upvotes: 2

Views: 899

Answers (3)

Rohit Gaikwad
Rohit Gaikwad

Reputation: 815

In your gridview code do the following changes.

$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',
        ),
    ),
));

And in your model->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,
    ));
}

Upvotes: 0

Srinivasan
Srinivasan

Reputation: 11

If you want to display company name,just do this in view.Don't change anything in model->search(). array( 'name'=>'Name', 'value'=>$model->company->name //here name is column name in company table. ),

Upvotes: 1

SiZE
SiZE

Reputation: 2267

You need to add together=true to your criteria.

$criteria->together = true;

It'll add join to query. Some information about lazy loading http://www.yiiframework.com/wiki/527/relational-query-lazy-loading-and-eager-loading-with-and-together/

Upvotes: 1

Related Questions