Example #1
0
 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;
 }
Example #2
0
 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;
 }