/** * Denormalizes relationship(s) * * @param Doctrine_Record $invoker * @return void */ protected function denormalize($invoker) { $relations = $this->_options['relations']; foreach ($relations as $relation) { $column = Doctrine_Template_Serializable::getColumnName($relation, $this->_options['column_suffix']); if ("" !== $invoker->{$column}) { if (!is_array($invoker->{$column})) { $invoker->{$column} = explode($this->_options['post_separator'], $invoker->{$column}); } $invoker->{$column} = $this->getSerializedIds($invoker->{$column}); } } }
/** * Deserializes relationship(s) * * @param Doctrine_Event $event * @return void */ public function postHydrate(Doctrine_Event $event) { $data = $event->data; $relations = $this->_options['relations']; foreach ($relations as $relation) { $column = Doctrine_Template_Serializable::getColumnName($relation, $this->_options['column_suffix']); $filter = $data[$column]; $model = Doctrine_Inflector::classify($relation['table']); if (!isset($relation['table_method'])) { $query = Doctrine_Core::getTable($model)->createQuery(); if (isset($relation['order_by'])) { $order = $relation['order_by']; $query->addOrderBy($order[0] . ' ' . $order[1]); } $query->setHydrationMode(Doctrine_Core::HYDRATE_ARRAY); $objects = $query->execute(); } else { $tableMethod = $relation['table_method']; $results = Doctrine_Core::getTable($model)->{$tableMethod}(); if ($results instanceof Doctrine_Query) { $objects = $results->execute(); } else { if ($results instanceof Doctrine_Collection) { $objects = $results; } else { if ($results instanceof Doctrine_Record) { $objects = new Doctrine_Collection($model); $objects[] = $results; } else { $objects = array(); } } } } // replace value of column $data[$column] = $this->normalize($objects, $filter); } $event->data = $data; }