Reputation: 988
I am trying to do a Join query using CDBCriteria in Yii framework. The issue is the join query works successfully but it does not display the columns from other tables.
I am doing in the following way
$criteria = new CDbCriteria;
$criteria->order = 't.id desc';
$criteria->select = '*';
$criteria->join = ' INNER JOIN table2 INNER JOIN table3 INNER JOIN table4';
When i run this, I can see only the mail table1 columns displayed. Other columns are not shown.
In my model class, I have the relation has
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'DmPhoneUser', 'user_id'),
'command' => array(self::BELONGS_TO, 'DmOtaCommand', 'command_id'),
'partner' => array(self::BELONGS_TO, 'DmPartner', 'partner_id'),
);
}
public function actionGetHistory($start, $per_page)
{
$partner_id = '10';
$criteria = new CDbCriteria;
$criteria->order = 't.history_id desc';
$criteria->select = 't.*, table2.*';
$criteria->join = ' INNER JOIN table2 ON t.command_id = table2.command_id';
$result = Table_1_class::model()->with('command')->findAll();
$history_data = CJSON::encode($result);
echo $history_data;
}
here command_id is common in table1 and table2.
This is how I am using the criteria code.
Upvotes: 2
Views: 9911
Reputation:
As I said, Yii's Active Record implementation will only use columns which are defined in the table itself or the tables you are linking to through with
, not arbitrary columns you return in the resultset.
Solution 1: Define a relation to table2
, add that relation to with
, and get rid of join
. Then you'll probably need to convert each returned object to an array - CJSON::encode
will not handle a model with relations well.
Solution 2: Use Yii::app()->db->createCommand("SQL query")->queryAll();
instead of Active Record. This will produce an array of arrays, which CJSON::encode
will have no problem with.
Upvotes: 4