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