public static function getCountViewByInstances($idObject, array $instances, $type = null) { $add = ""; if ($type != null) { $add = " AND view_type=" . $type; } $collection = new DaActiveRecordCollection($instances); $array = $collection->getKeys(); $sql = "SELECT id_instance, COUNT(view_count) AS c FROM da_stat_view WHERE id_object = :id_object AND id_instance IN (" . implode(", ", $array) . ')' . $add . ' GROUP BY id_instance;'; $data = Yii::app()->db->createCommand($sql)->queryAll(true, array(':id_object' => $idObject)); $result = array(); foreach ($data as $row) { $result[$row['id_instance']] = $row['c']; } return $result; }
public function getInstancesDependentData($instances, $all = true) { $scalar = false; $collection = null; if (is_array($instances)) { $collection = new DaActiveRecordCollection($instances); } else { if ($instances instanceof DaActiveRecordCollection) { $collection = $instances; } else { if ($instances instanceof DaActiveRecord) { $collection = new DaActiveRecordCollection(array($instances)); $scalar = true; } else { throw new ErrorException('Неверно определен тип параметра метода getInstancesDependentData.'); } } } $arrayOfId = $collection->getKeys(); $relationParams = $this->getObjectInstance()->relationParameters; $assocData = array_fill_keys($arrayOfId, array()); foreach ($relationParams as $param) { $whereConfig = array('and', array('in', $param->getFieldName(), $arrayOfId)); $idObject = $param->getIdObjectParameter(); $object = DaObject::getById($idObject, false); $data = Yii::app()->db->createCommand()->select($param->getFieldName() . ' AS id, count(*) AS cnt')->from($object->table_name)->where($whereConfig)->group($param->getFieldName())->queryAll(); /* // многообъектая поддержка $iq = new InstanceQuery($where); $arrayOfIdObject = Object::getCommonObjectBySingle($idObjectTmp); if (count($arrayOfIdObject) > 1) { $iq->setUsedObjects(array($idObjectTmp)); }*/ foreach ($data as $row) { $assocData[$row['id']][$idObject] = $row['cnt']; if (!$all && isset($arrayOfId[$row['id']])) { unset($arrayOfId[$row['id']]); } } if (!$all && count($arrayOfId) == 0) { break; } } if ($scalar) { return array_shift($assocData); } return $assocData; }