- Added some new method to EntityCollection (replaceWith, mergeWith, randomize, sort)

- WIP on virtual fields
- Some minor bugfixes
This commit is contained in:
Dave Mc Nicoll committed 2020-11-27 12:09:15 -05:00
1 parent c8397484e6
commit 30a0a80cbe
9 files changed
+213 -47

No files matched your search

+16 -13
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 };
use Ulmus\Annotation\Property\{ Field, Relation, OrderBy, Where, Join, Virtual };
use Ulmus\Annotation\Property\Field\{ Id, ForeignKey, CreatedAt, UpdatedAt, };
trait EntityTrait {
@@ -71,7 +71,7 @@ trait EntityTrait {
$repository = $baseEntity->repository();
foreach($where as $condition) {
$repository->where($condition->field, $condition->value, $condition->operator);
$repository->where($condition->field, is_callable($condition->value) ? $f = call_user_func_array($condition->value, [ $this ]) : $condition->value, $condition->operator);
}
foreach($order as $item) {
@@ -82,9 +82,11 @@ trait EntityTrait {
}
switch( $relationType ) {
case 'onetoone':
$repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $baseEntity->field($relation->foreignKey), $this->$field );
case 'onetoone':
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);
$result = call_user_func([$repository, $relation->function]);
@@ -96,7 +98,9 @@ trait EntityTrait {
return $this->$name = $result[0];
case 'onetomany':
$repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $baseEntity->field($relation->foreignKey), $this->$field );
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([$repository, $relation->function]);
@@ -186,12 +190,12 @@ trait EntityTrait {
/**
* @Ignore
*/
public function entityFillFromDataset(iterable $dataset) : self
public function entityFillFromDataset(iterable $dataset, bool $isLoadedDataset = false) : self
{
$loaded = $this->isLoaded();
$entityResolver = $this->resolveEntity();
foreach($dataset as $key => $value) {
$field = $entityResolver->field(strtolower($key), EntityResolver::KEY_COLUMN_NAME, false) ?? null;
@@ -235,7 +239,7 @@ trait EntityTrait {
}
# Keeping original data to diff on UPDATE query
if ( ! $loaded ) {
if ( ! $loaded || $isLoadedDataset ) {
#if ( $field !== null ) {
# $annotation = $entityResolver->searchFieldAnnotation($field['name'], new Field() );
# $this->entityLoadedDataset[$annotation ? $annotation->name : $field['name']] = $dataset; # <--------- THIS TO FIX !!!!!!
@@ -268,7 +272,7 @@ trait EntityTrait {
$entityResolver = $this->resolveEntity();
foreach($entityResolver->fieldList() as $key => $field) {
foreach($entityResolver->fieldList(Common\EntityResolver::KEY_ENTITY_NAME, true) as $key => $field) {
$annotation = $entityResolver->searchFieldAnnotation($key, new Field() );
if ( isset($this->$key) ) {
@@ -292,7 +296,6 @@ trait EntityTrait {
}
}
# @TODO Must fix recursive bug !
if ($includeRelations) {
foreach($entityResolver->properties as $name => $field){
$relation = $entityResolver->searchFieldAnnotation($name, new Relation() );
@@ -303,13 +306,13 @@ trait EntityTrait {
$list = [];
foreach($value as $entity) {
$list[] = $entity->entityGetDataset(true);
$list[] = $entity->entityGetDataset(false);
}
$dataset[$name] = $list;
}
elseif ( is_object($value) ) {
$dataset[$name] = $value->entityGetDataset(true);
$dataset[$name] = $value->entityGetDataset(false);
}
}
}