Ejemplo n.º 1
0
 /**
  * Remove a value from a array member
  *
  * @param string $property
  * @param string|int|CHOQ_DB_Object $key
  * @return self
  */
 public function remove($property, $key)
 {
     $member = $this->_getMember($property);
     if ($member->fieldType != "array") {
         error("Cannot remove() for '{$member}', is not a array member");
     }
     if ($key instanceof CHOQ_DB_Object) {
         $id = $key->getId();
         if (!$id) {
             error("Could not use transient object '" . get_class($key) . "' for database usage, in member '{$member}'");
         }
         $key = $id;
     }
     $existValue = $this->getByKey($property, $key);
     if ($existValue !== null) {
         unset($this->_realValues[$property][$key]);
         if (!$this->_realValues[$property]) {
             $this->_realValues[$property] = null;
         }
         $this->_changes[$property] = true;
     }
     return $this;
 }
Ejemplo n.º 2
0
 /**
  * Lazy load array member - Fetch all array values for all objects that stored in the cache
  *
  * @param CHOQ_DB_Object $object
  * @param CHOQ_DB_TypeMember $member
  */
 public function lazyLoadArrayMember(CHOQ_DB_Object $object, CHOQ_DB_TypeMember $member)
 {
     $db = $member->getDb ? $member->getDb : $this;
     $objects = CHOQ_DB_Object::getCachedObjects($db, $object->_getType());
     $objects[$object->getId()] = $object;
     $ids = array();
     if ($objects) {
         foreach ($objects as $o) {
             if (!isset($o->_loaded[$member->name]) && isset($o->_dbValues[$member->name])) {
                 $ids[$o->getId()] = $o->getId();
             }
             $o->_loaded[$member->name] = true;
         }
     }
     if ($ids) {
         $table = $db->quote($member->type->class . "_" . $member->name);
         $tmp = $db->fetchAsAssoc("SELECT * FROM {$table} WHERE " . $db->quote("o") . " IN " . $db->toDb($ids));
         if ($member->fieldTypeArrayClass) {
             $arr = $db->getByIds(NULL, arrayMapProperty($tmp, "v"));
             foreach ($tmp as $row) {
                 if (isset($arr[$row["v"]])) {
                     $objects[$row["o"]]->add($member->name, $arr[$row["v"]], $arr[$row["v"]]->getId(), false);
                 }
             }
         } else {
             foreach ($tmp as $row) {
                 if (isset($ids[$row["o"]])) {
                     $objects[$row["o"]]->add($member->name, $member->convertFromDbValue($row["v"]), $row["k"], false);
                 }
             }
         }
     }
 }