Relationships
This commit is contained in:
@ -143,4 +143,10 @@ abstract class Model extends BaseModel implements ModelInterface {
|
|||||||
public function jsonSerialize() {
|
public function jsonSerialize() {
|
||||||
return $this->toArray();
|
return $this->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setRelationship(string $class_name): Relationship {
|
||||||
|
return (new Relationship)
|
||||||
|
->setFactory($this->container->get('model'))
|
||||||
|
->setStart($class_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,26 +8,52 @@ class Relationship {
|
|||||||
protected $start;
|
protected $start;
|
||||||
protected $nodes;
|
protected $nodes;
|
||||||
|
|
||||||
public function __construct(string $class_name) {
|
public function __construct(string $class_name = '') {
|
||||||
|
if ($class_name != '') {
|
||||||
$this->setStart($class_name);
|
$this->setStart($class_name);
|
||||||
}
|
}
|
||||||
public function setStart(string $class_name) {
|
}
|
||||||
|
public function setStart(string $class_name): Relationship {
|
||||||
$this->start = (object) [
|
$this->start = (object) [
|
||||||
'class' => $class_name,
|
'class' => $class_name,
|
||||||
'table' => Model::getTable($class_name)
|
'table' => Model::getTable($class_name)
|
||||||
];
|
];
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
public function addNode(RelationNode $node) {
|
protected $factory;
|
||||||
|
public function setFactory(ModelFactory $factory): Relationship {
|
||||||
|
$this->factory = $factory;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
public function with(string $from_class, string $from_key, string $to_class, string $to_key): Relationship {
|
||||||
|
$node = (new RelationNode())
|
||||||
|
->setSource($from_class, $from_key)
|
||||||
|
->setDestination($to_class, $to_key);
|
||||||
if ($this->nodes === null) {
|
if ($this->nodes === null) {
|
||||||
$this->nodes = [];
|
$this->nodes = [];
|
||||||
}
|
}
|
||||||
$this->nodes []= $node;
|
$this->nodes []= $node;
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
public function build(ModelFactory $factory): ModelFactory {
|
protected $condition;
|
||||||
|
public function setCondition(string $class_name, string $key, $value): Relationship {
|
||||||
|
$this->condition = (object) [
|
||||||
|
'class' => $class_name,
|
||||||
|
'table' => Model::getTable($class_name),
|
||||||
|
'key' => $key,
|
||||||
|
'value' => $value
|
||||||
|
];
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
public function build(): ModelFactory {
|
||||||
$output = $factory->find($this->start->class);
|
$output = $factory->find($this->start->class);
|
||||||
foreach ($this->nodes as $node) {
|
foreach ($this->nodes as $node) {
|
||||||
$output = $node->build($factory);
|
$output = $node->build($output);
|
||||||
}
|
}
|
||||||
|
$output = $output->where([
|
||||||
|
implode('.', [$this->condition->table, $this->condition->key]),
|
||||||
|
$this->condition->value
|
||||||
|
]);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user