Anyone can explain this.
I have a model file called TranslationOriginal
and here is the relations
public function relations(){
return array(
'translation_user' => array(self::HAS_MANY, 'TranslationUsers', 'translation_original_id', 'order' => '`translation_user`.confirmed DESC')
);
}
public function search(){
$criteria = new CDbCriteria();
$conditions = array();
$joinType = 'INNER JOIN';
$conditions[] = '`translation_user`.translation_language_id = \''. mysql_escape_string($this->translation_language_id) .'\'';
if($this->no_translated_only){
$joinType = 'LEFT JOIN';
$conditions = array();
$criteria->addCondition('t.id NOT IN (SELECT DISTINCT translation_original_id FROM translation_users)');
}
if($this->text){
$criteria->compare('t.text', $this->text, true);
}
$criteria->with = array(
'translation_user' => array(
'condition' => join(" AND ",$conditions),
'joinType' => $joinType
)
);
return new CActiveDataProvider(get_class($this), array(
'criteria' => $criteria
));
}
as you see, I use search model that return CActiveDataProvider, I throw this into view that used CListView widget.
what I ask is, when I try to see on Logger, I’m wondering why I get a different query,
there are additional condition, and I don’t know where is come from, the original query should like this :
Querying SQL: SELECT `t`.`id` AS `t0_c0`, `translation_user`.`id` AS
`t1_c0`, `translation_user`.`translation_language_id` AS `t1_c1`,
`translation_user`.`translation_original_id` AS `t1_c2`,
`translation_user`.`text` AS `t1_c3`, `translation_user`.`confirmed` AS
`t1_c4` FROM `translation_original` `t` RIGHT JOIN `translation_users`
`translation_user` ON
(`translation_user`.`translation_original_id`=`t`.`id`) WHERE
(`translation_user`.translation_language_id = '3') ORDER BY
`translation_user`.confirmed DESC
but, what I get when I see profiler is like this (I make bold the addition):
Querying SQL: SELECT t
.id
AS t0_c0
, translation_user
.id
AS
t1_c0
, translation_user
.translation_language_id
AS t1_c1
,
translation_user
.translation_original_id
AS t1_c2
,
translation_user
.text
AS t1_c3
, translation_user
.confirmed
AS
t1_c4
FROM translation_original
t
RIGHT JOIN translation_users
translation_user
ON
(translation_user
.translation_original_id
=t
.id
) WHERE [b](t
.id
IN
(11, 12, 13, 14, 15, 16, 17, 18, 19, 20))[/b] AND
(translation_user
.translation_language_id = ‘3’) ORDER BY
translation_user
.confirmed DESC
this is the additional condition that I see on profiler, where as I don’t define it in my script, neither in model nor controller.
... WHERE (`t`.`id` IN
(11, 12, 13, 14, 15, 16, 17, 18, 19, 20)) AND ...
I need to remove this additional condition.
anyone could explain me why is this?
Thankyou in advance,