function is_association_property($name) { return AdoDBRecord_Tools::is_belongs_to_property($name) || AdoDBRecord_Tools::is_has_many_property($name) || AdoDBRecord_Tools::is_has_one_property($name); }
function parse_member() { $args = func_get_args(); switch (count($args)) { case 1: # this call was made by __get() list($property) = $args; if (AdoDBRecord_Tools::is_column_property($property)) { return $this->_attributes[$property]; } if ($property == "id") { return $this->_attributes[$this->_primary_key]; } # if no column property check for association or proxy # TODO cache proxy $use_proxy = substr($property, -1) == "_"; if ($use_proxy) { $property = substr($property, 0, -1); } if (AdoDBRecord_Tools::is_association_property($property)) { if (AdoDBRecord_Tools::is_has_many_property($property)) { $returns_many = true; $options = $this->_has_many[$property]; } elseif (AdoDBRecord_Tools::is_belongs_to_property($property)) { $returns_many = false; $options = $this->_belongs_to[$property]; } elseif (AdoDBRecord_Tools::is_has_one_property($property)) { $returns_many = false; $options = $this->_has_one[$property]; } else { die("AdoDBRecord_Base::parse_member(): fatal association inconsistency"); } $proxy = new AdoDBRecord_AssociationProxy($this, $returns_many, $options); if ($use_proxy) { return $proxy; } return $proxy->find(); } # TODO write a real error handler die(get_class($this) . "->{$property}: No such property"); case 2: # this call was made by __set() # TODO check property is valid (_associations) list($property, $value) = $args; if (AdoDBRecord_Tools::is_column_property($property)) { return $this->set_attributes(array($property => $value)); } if ($property == "id") { return $this->set_attributes(array($this->_primary_key => $value)); } # TODO write a real error handler die(get_class($this) . "->{$property}: No such property"); default: # this call was made by some chaotic wizard and is invalid # TODO write a real error handler die("AdoDBRecord_Base::parse_member(): unexpected arguments received"); } }