findAllByAttributes

I never really properly understood how findAllByAttributes() works. I want to do the following find:

find all records in Enquiry model where enquiry_status < 5 AND enquiry_date > strtotime(‘now’)

start_datetime will of course need to be converted to strtotime in order to perform the comparison.

You cannot achive with findAllByAttributes.

This function check if the attribute are = to the values. You should use CDbCritera.




$criteria=new CDbCriteria;

$criteria->addCondition("enquiry_status < 5");

$criteria->addCondition("enquiry_date > strtotime('now')");

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



Thanks. I just did it like this instead:




Enquiry::model()->findAll('enquiry_status < 5 AND enquiry_date >=:enquiry_date',

			array('enquiry_date'=>date('Y-m-d H:i:s')));



I thought findAllByAttributes would make it easier or something.




$models = Enquiry::model()->findAllByAttributes(

                                array(), 

                                "enquiry_status < 5 AND enquiry_date >=:enquiry_date", 

                                array('enquiry_date'=>date('Y-m-d H:i:s')))

                            );



The first parameter is an array, it will change to $key=$value, for example,




$models = Enquiry::model()->findAllByAttributes(

                                array("id"=>1), 

                                "enquiry_status < 5 AND enquiry_date >=:enquiry_date", 

                                array('enquiry_date'=>date('Y-m-d H:i:s')))

                            );



The sql will be




SELECT * FROM 'Enquiry' 't' WHERE id=1 AND enquiry_status < 5 AND enquiry_date >=:enquiry_date



I found this pretty simple.

$models = Enquiry::model()->findAllByAttributes(array(‘enquiry_status’=>5,‘enquiry_date’=>date(‘Y-m-d H:i:s’)));

Is this simple enough?

Your code checks that enquiry_status equals 5… but in the question it was needed that enquiry_status is less then 5, same for date…

Inspired by DavidHuan, here is my favored usage.




$found = YourModelClass::model()->findAllByAttributes(

	array(),

	$condition  = 'columnNameInDb = :someVarName AND columnNameInDb02 > :someVarName02',

	$params     = array(

		':someVarName' => $someVarNameValue, 

		':someVarName02' => $someVarNameValue02,

	)

);



Hope it helps,

Nam.

My favourite would be CDbCriteria->compare().




$criteria = new CDbCriteria();

$criteria->compare('enquiry_status', '<'. 5);

$criteria->compare('enquiry_date', '>' . strtotime('now'));

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



But there are many ways to do that.

FYI

Is the same as




$found = YourModelClass::model()->findAll('columnNameInDb = :someVarName 

		AND columnNameInDb02 > :someVarName02', array(

		':someVarName' => $someVarNameValue, 

		':someVarName02' => $someVarNameValue02,

	)

);



It is Amazing I need it :D thank.

I need to fetch records based on following conditions :

if(isset($corporateid) && !empty($corporateid)) {

$cond1 =” CORPORATEID=$corporateid “;

}

if(isset($brokerid) && !empty($brokerid)) {

if($cond1!=”){$cond1 .=” AND “;}

$cond1 .=” AGENTID=$brokerid”;

}

if(isset($RMId) && !empty($RMId)) {

if($cond1!=”){$cond1 .=” AND “;}

$cond1 .=” REPORTINGMANAGERID=$RMId “;

}

$cond1 .=” AND PAYMENTSTATUS=’CONFIRM’ “;

$sql=”select *from CRMTOPUPPROPOSERDETAILS where $cond1

}

The above condition code is written in simple php but i need to create these condition in Yii frame work using CActiveDataProvider;

Pls help me to solve this problem.

$some_variable = Model_name::model()->findAllByAttributes(array(‘fieldname’=>‘some_value’));

thats it…