This commit is contained in:
mcndave committed 2021-01-26 16:59:29 +00:00
commit 8f9332fbad
8 files changed
+131 -36

No files matched your search

+12 -4
View File
@@ -8,7 +8,7 @@ use Ulmus\Repository,
Ulmus\Common\EntityField;
use Ulmus\Annotation\Classes\{ Method, Table, Collation, };
use Ulmus\Annotation\Property\{ Field, Relation, OrderBy, Where, Join, Filter, On };
use Ulmus\Annotation\Property\{ Field, Filter, Relation, OrderBy, Where, Join, Virtual, On, };
use Ulmus\Annotation\Property\Field\{ Id, ForeignKey, CreatedAt, UpdatedAt, Datetime as DateTime, Date, Time, };
trait EntityTrait {
@@ -67,11 +67,10 @@ trait EntityTrait {
$filters = $entityResolver->searchFieldAnnotationList($name, new Filter() );
$baseEntity = $relation->entity ?? $relation->bridge ?? $entityResolver->properties[$name]['type'];
$repository = $baseEntity::repository()->open();
foreach ($where as $condition) {
$repository->where($condition->field, is_callable($condition->value) ? call_user_func_array($condition->value, [$this]) : $condition->value, $condition->operator, $condition->condition);
foreach($where as $condition) {
$repository->where($condition->field, is_callable($condition->value) ? call_user_func_array($condition->value, [ $this ]) : $condition->value, $condition->operator, $condition->condition);
}
$repository->close();
@@ -79,6 +78,14 @@ trait EntityTrait {
foreach ($order as $item) {
$repository->orderBy($item->field, $item->order);
}
$applyFilter = function($repository) use ($filters, $name) {
foreach($filters as $filter) {
$repository = call_user_func_array([ $this, $filter->method ], [ $repository, $name ]);
}
return $repository;
};
$field = $relation->key;
@@ -112,6 +119,7 @@ trait EntityTrait {
if ($relation->foreignKey) {
$repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $baseEntity::field($relation->foreignKey), is_callable($field) ? $field($this) : $this->$field );
}
$this->eventExecute(Event\EntityRelationLoadInterface::class, $name, $repository);
return $this->$name = call_user_func([$applyFilter($repository), $relation->function]);