/** * Sets the parent model * * @param string|Atomik_Model_Builder $parentModel */ public function setParentModel($parentModel) { $parent = Atomik_Model_Builder_Factory::get($parentModel); $type = $parent->getOption('inheritance', 'abstract'); switch($type) { case 'none': return; case 'abstract': $this->_fields = array_merge($parent->getFields(), $this->_fields); $this->_options = array_merge($parent->getOptions(), $this->_options); foreach ($parent->getBehaviourBroker()->getBehaviours() as $behaviour) { $this->_behaviourBroker->addBehaviour(clone $behaviour); } foreach ($parent->getReferences() as $ref) { $this->addReference(clone $ref); } foreach ($parent->getLinks() as $link) { $this->addLink(clone $link); } break; case 'reference': $ref = new Atomik_Model_Builder_Reference('parent', Atomik_Model_Builder_Reference::HAS_PARENT); $ref->target = $parent; $ref->targetField = $parent->getPrimaryKeyField()->name; $ref->sourceField = $ref->target . '_' . $ref->targetField; $this->addReference($ref); break; } $this->_parentModelBuilder = $parent; $this->_inheritanceType = $type; }