Yii Framework Forum: Yii criteria mergeWith problem - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Yii criteria mergeWith problem Rate Topic: -----

#1 User is offline   elbek 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 134
  • Joined: 22-July 10
  • Location:MA, USA

Posted 29 April 2012 - 03:41 AM

I am using criteria's mergeWith() method, it is not working how it is supposed to work:

here is two criterias:
1:
[condition] => ( agegroupid=1) AND (methodid IN (:ycp0, :ycp1))
            [params] => Array
                (
                    [:ycp0] => 17
                    [:ycp1] => 18
                )

2:
[condition] => (methodid=:ycp0) AND (categoryid  =0)
            [params] => Array
                (
                    [:ycp0] => 9
                )


i am using $criteria1->mergeWith($criteria2, false);
what i am getting:
[condition] => (( agegroupid=1) AND (methodid IN (:ycp0, :ycp1))) OR ((methodid=:ycp0) AND (categoryid  =0))
    [params] => Array
        (
            [:ycp0] => 9
            [:ycp1] => 18
        )


they are merged with or: that is correct
but with params second one is overriding param of first one, i look inside merge function and found:
if($this->params!==$criteria->params)
		$this->params=array_merge($this->params,$criteria->params);


if it merges and in two different criteria's conditions key will start from the same key(:ycp0) and the second ones param will overried first ones. How to fix that? or i am using it incorrect?
Elbek
0

#2 User is offline   Pravin Gajera 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 137
  • Joined: 25-October 11
  • Location:India

Posted 29 April 2012 - 03:45 AM

hi

you have to use criteria like below

$criteria = new CDbCriteria;
$criteria->addCondition('t.id = :id');
$criteria->params = array(':id' => Yii::app()->user->id);

Model_name::model()->findAll($criteria);

Thanks
0

#3 User is offline   elbek 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 134
  • Joined: 22-July 10
  • Location:MA, USA

Posted 29 April 2012 - 04:48 AM

what about if i want this:

$criteria = new CDbCriteria;
$criteria->addCondition('t.id = :id');
$criteria->params = array(':id' => 1);

$criteria2 = new CDbCriteria;
$criteria2->addCondition('t.id = :id');
$criteria2->params = array(':id' => 2);

$criteria2->mergeWith($criteria1, false);

Model_name::model()->findAll($criteria2);


it is not possible?
Elbek
0

#4 User is offline   bennouna 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,121
  • Joined: 05-January 12
  • Location:Morocco

Posted 29 April 2012 - 06:57 AM

View Postelbek, on 29 April 2012 - 04:48 AM, said:

what about if i want this:

$criteria = new CDbCriteria;
$criteria->addCondition('t.id = :id');
$criteria->params = array(':id' => 1);

$criteria2 = new CDbCriteria;
$criteria2->addCondition('t.id = :id');
$criteria2->params = array(':id' => 2);

$criteria2->mergeWith($criteria1, false);

Model_name::model()->findAll($criteria2);


it is not possible?


I think that on a thread recently someone came with this tip:
$criteria = new CDbCriteria;
$criteria->addCondition('t.id = :id1');
$criteria->params = array(':id1' => 1);

$criteria2 = new CDbCriteria;
$criteria2->addCondition('t.id = :id2');
$criteria2->params = array(':id2' => 2);

$criteria2->mergeWith($criteria1, false);

Model_name::model()->findAll($criteria2);

Otherwise, the first value would be overwritten
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users