CDbCriteria condition

Hi, at the start - forgive me my english.

I write some application, where I can generate report (Order, products etc).

Code:




		$requestArray = $_POST;


		$criteria = new CDbCriteria;

		$criteria->together = true;


		if(isSet($requestArray['OrderCountry'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderCountry'])){

				foreach($requestArray['OrderCountry'] as $key=>$value){

					if($i == 0){

						$condition .= 't.country_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.country_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderStatus'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderStatus'])){

				foreach($requestArray['OrderStatus'] as $key=>$value){

					if($i == 0){

						$condition .= 't.status='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.status='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderSource'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderSource'])){

				foreach($requestArray['OrderSource'] as $key=>$value){

					if($i == 0){

						$condition .= 't.source='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.source='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderPrimaryPaymentMethod'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderPrimaryPaymentMethod'])){

				foreach($requestArray['OrderPrimaryPaymentMethod'] as $key=>$value){

					if($i == 0){

						$condition .= 't.primary_payment_method_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.primary_payment_method_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderSecondaryPaymentMethod'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderSecondaryPaymentMethod'])){

				foreach($requestArray['OrderSecondaryPaymentMethod'] as $key=>$value){

					if($i == 0){

						$condition .= 't.secondary_payment_method_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.secondary_payment_method_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderShippingMethod'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderShippingMethod'])){

				foreach($requestArray['OrderShippingMethod'] as $key=>$value){

					if($i == 0){

						$condition .= 't.shipping_method_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.shipping_method_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderProduct'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderProduct'])){

				$criteria->with = array('orderXproducts');

				foreach($requestArray['OrderProduct'] as $key=>$value){

					if($i == 0){

						$condition .= 'orderXproducts.product_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR orderXproducts.product_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderProductCategory'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderProductCategory'])){

				$criteria->with = array('orderXproducts.product');

				foreach($requestArray['OrderProduct'] as $key=>$value){

					if($i == 0){

						$condition .= ' product.product_category_id='.$key.' ';

					}elseif($i > 0){

						$condition.=' OR product.product_category_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		if(isSet($requestArray['OrderConfirmedUserId'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderConfirmedUserId'])){

				foreach($requestArray['OrderConfirmedUserId'] as $key=>$value){

					if($i == 0){

						$condition .= 't.confirmed_user_id='.$key.' ';

					}elseif($i > 0){

						$condition .= 'OR t.confirmed_user_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}




		if(isSet($requestArray['OrderCustomerCountry'])){

			$i = 0;

			$condition = '';

			if(!empty($requestArray['OrderCustomerCountry'])){

				$criteria->with = array('customer');

				foreach($requestArray['OrderCustomerCountry'] as $key=>$value){

					if($i == 0){

						$condition .= 'customer.country_id='.$key.' ';

					}elseif($i > 0){ 

						$condition.='OR customer.country_id='.$key.' ';

					}

					$i++;

				}

				$criteria->addCondition($condition, 'AND');

			}

		}


		print_r(Order::model()->findAll($criteria));



This code return error: Column not found: 1054 Unknown column ‘orderXproducts.product_id’ in ‘where clause’

Command was executed:




 SELECT `t`.`id` AS `t0_c0`,

`t`.`uniq_id` AS `t0_c1`, `t`.`country_id` AS `t0_c2`,

`t`.`shipping_method_id` AS `t0_c3`, `t`.`primary_payment_method_id` AS

`t0_c4`, `t`.`secondary_payment_method_id` AS `t0_c5`, `t`.`customer_id` AS

`t0_c6`, `t`.`status` AS `t0_c7`, `t`.`source` AS `t0_c8`,

`t`.`first_price` AS `t0_c9`, `t`.`last_price` AS `t0_c10`,

`t`.`shipping_uniq` AS `t0_c11`, `t`.`deposit` AS `t0_c12`,

`t`.`date_create` AS `t0_c13`, `t`.`confirmed_user_id` AS `t0_c14`,

`customer`.`id` AS `t1_c0`, `customer`.`firstname` AS `t1_c1`,

`customer`.`lastname` AS `t1_c2`, `customer`.`city` AS `t1_c3`,

`customer`.`zip_code` AS `t1_c4`, `customer`.`street` AS `t1_c5`,

`customer`.`phone` AS `t1_c6`, `customer`.`email` AS `t1_c7`,

`customer`.`country_id` AS `t1_c8` FROM `order` `t`  LEFT OUTER JOIN

`customer` `customer` ON (`t`.`customer_id`=`customer`.`id`)  WHERE

((((((((((t.country_id=1 OR t.country_id=4 ) AND (t.status=1 OR t.status=2

OR t.status=3 OR t.status=4 OR t.status=5 OR t.status=6 OR t.status=7 OR

t.status=8 )) AND (t.source=1 OR t.source=2 )) AND

(t.primary_payment_method_id=1 OR t.primary_payment_method_id=2 )) AND

(t.secondary_payment_method_id=1 OR t.secondary_payment_method_id=2 )) AND

(t.shipping_method_id=1 OR t.shipping_method_id=6 )) AND

(orderXproducts.product_id=1 OR orderXproducts.product_id=2 OR

orderXproducts.product_id=4 )) AND ( product.product_category_id=1  OR

product.product_category_id=2  OR product.product_category_id=4 )) AND

(t.confirmed_user_id=2 OR t.confirmed_user_id=5 )) AND

(customer.country_id=1 OR customer.country_id=4 ))



When I remove last code section (OrderCustomerCountry - ambiguous column (country_id | tbl Customer) (country_id | tbl Order) - I resolve this problem with add "t." in all order condition ), then all working fine.

When I remove code section (OrderProductCategory and OrderProduct), then all working fine.

–edit–

I saw, problem is exist, when I use : $criteria->with = array(‘customer’);

Customer table has ‘country_id’ field like Order table.

What I doing wrong?

Thx for help

The end - I change column name - resolved problem.