/** * Get or create record relation by it's name and pre-loaded (optional) set of data. * * @param string $name * @param mixed $data * @param bool $loaded * @return RelationInterface * @throws RelationException * @throws RecordException */ public function relation($name, $data = null, $loaded = false) { if (array_key_exists($name, $this->relations)) { if (!is_object($this->relations[$name])) { $data = $this->relations[$name]; unset($this->relations[$name]); //Loaded relation return $this->relation($name, $data, true); } //Already created return $this->relations[$name]; } //Constructing relation if (!isset($this->ormSchema[ORM::M_RELATIONS][$name])) { throw new RecordException("Undefined relation {$name} in record " . static::class . "."); } $relation = $this->ormSchema[ORM::M_RELATIONS][$name]; return $this->relations[$name] = $this->orm->relation($relation[ORM::R_TYPE], $this, $relation[ORM::R_DEFINITION], $data, $loaded); }