/**
* Overload ORM::__get to support "parent" and "children" properties.
*
* @param string column name
* @return mixed
*/
public function __get($column)
{
if ($column === 'parent') {
if (empty($this->related[$column])) {
// Load child model
$model = ORM::factory(inflector::singular($this->children));
if (array_key_exists($this->parent_key, $this->object)) {
// Find children of this parent
$model->where($model->primary_key, $this->object[$this->parent_key])->find();
}
$this->related[$column] = $model;
}
return $this->related[$column];
} elseif ($column === 'children') {
if (empty($this->related[$column])) {
$model = ORM::factory(inflector::singular($this->children));
if ($this->children === $this->table_name) {
// Load children within this table
$this->related[$column] = $model->where($this->parent_key, $this->object[$this->primary_key])->find_all();
} else {
// Find first selection of children
$this->related[$column] = $model->where($this->foreign_key(), $this->object[$this->primary_key])->where($this->parent_key, NULL)->find_all();
}
}
return $this->related[$column];
}
return parent::__get($column);
}