/** * *-to-many * * @param $relation_name * @param Model $object * @param $create_relation * @throws Wave\Exception */ protected function _addRelationObject($relation_name, Model $object, $create_relation = true, $join_data = array()) { $this->_data[$relation_name][] = $object; $relation_data = $this->_getRelation($relation_name); if ($object !== null && $create_relation) { switch ($relation_data['relation_type']) { case Relation::MANY_TO_MANY: if (!$object->_isLoaded()) { $object->save(); } $related_class_name = $relation_data['related_class']; $rc = new $related_class_name(); foreach ($join_data as $key => $value) { $rc->{$key} = $value; } foreach ($relation_data['target_relation']['local_columns'] as $position => $local_column) { $rc->{$local_column} = $object->{$relation_data['target_relation']['related_columns'][$position]}; } $object->_setParentObject($rc); //Deliberate non-break here so the -many logic flows on with $object reassigned. $object = $rc; case Relation::ONE_TO_MANY: foreach ($relation_data['local_columns'] as $position => $local_column) { $object->{$relation_data['related_columns'][$position]} = $this->_data[$local_column]; } $object->_setParentObject($this); break; } $object->save(); } }
/** * Save an object to the database (either INSERT or UPDATE) * * @param Model $object * * @return bool */ public static function save(Model &$object) { if ($object->_isLoaded()) { if ($object->_isDirty()) { return self::update($object); } } else { return self::insert($object); } }