Получить сумму и AVG в CakePHP 2.x найти - PullRequest
0 голосов
/ 06 марта 2019

У меня есть Product, «Заказ» OrderDetail таблиц. OrderDetail есть записи на покупку и продажу.

Как и OrderDetail, иметь order_quantity, delivery_quantity, тип (купить / продать), под рукой (# количество количества в наличии), черновик (заказ черновой или размещен или выполнен).

Итак, я хочу создать функцию, в которой я мог бы передавать идентификаторы продукта ($pids= [1,2,3 .. so on ];) с датой, звучащей как getDetails($pids, $start_date, $end_date);

Здесь я хочу avg of on-hand, sum of order_quantity , sum of delivered_quantity , sorts ( sum of order_quantity - sum of delivered_quantity ), total sold or buy (type 1 and 2).

Сейчас я делаю это в foreach loop, но это занимает много времени загрузки. неверный результат при использовании hasMany как, например, я использую этот код в цикле, но я не хочу использовать цикл.

$data1 = $this->OrderDetail->find('all',[ 'recursive'=>1,'fields' => ['AVG(OrderDetail.on_hand) AS avg_on_hold'],
                    'conditions'=>[ 'OrderDetail.type'=>[1,2],'OrderDetail.status'=>[0,1],
                        'OrderDetail.product_id'=>$pid, 'DATE(OrderDetail.created) BETWEEN ? AND ?' => [$st, $end] ] ]);


$data2 = $this->OrderDetail->find('all',[ 'recursive'=>1,'fields' => [ 'sum(OrderDetail.order_qty) AS order_qty', 'sum(OrderDetail.delivered_qty) AS delivered_qty' ],
                    'conditions'=>[ 'Order.type'=>2,'Order.status'=>3, 'OrderDetail.product_id'=>$pid, 
                    'DATE(Order.delivery_date) BETWEEN ? AND ?' => [$st, $end] ] ]);
...