I have two models, loading data from different tables of the same database. I’ll call one A and the other B. I’ve linked the two models using the relations() methods, such that A belongs to B and B has many A.
I’m now trying to display data from both models in the same table using CGridView with a CActiveDataProvider. My CActiveDataProvider has the following criteria:
$criteria->select = '*';
$criteria->with = array('B');
I’m currently attempting to display just the ID from model A and the Name from model B. My view contains the following:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'enableSorting' => false,
'columns' => array(
'ID:text:ID',
'B.Name:text:Name',
)
));
This works fine and displays two columns, one with the IDs from model A, the other with the Names from model B. However, I need to display only those rows whose ID is in a given list. To do this I added a simple InCondition to my criteria, making the full criteria as below:
$criteria->select = '*';
$criteria->with = array('B');
$criteria->addInCondition('t.ID', $allowedIDs);
When I do this, I get all of the IDs filtered and listed correctly, but the Names are all blank. Putting var_dump($data->B ) as the value of a column shows as null in every row. However, I get no errors so that must still be referencing something (if I change B to C then I get the error "A.C is not defined"). It is as if adding that InCondition has caused all of the data from B to become null.
Is this a bug or expected behaviour? Either way, does anyone know of a workaround/am I doing something wrong here?