- Some bugfixes made in Relation
- Fixed search() methods in EntityCollection - Work done on Relations of EntityTrait ; a lot of work still to be done. It must also move to another file.
This commit is contained in:
parent
4d221859fc
commit
8e521025d3
|
@ -6,17 +6,17 @@ class Relation implements \Ulmus\Annotation\Annotation {
|
||||||
|
|
||||||
public string $type;
|
public string $type;
|
||||||
|
|
||||||
public string $key;
|
public /*stringable*/ $key;
|
||||||
|
|
||||||
public string $foreignKey;
|
public /*stringable*/ $foreignKey;
|
||||||
|
|
||||||
public array $foreignKeys;
|
public array $foreignKeys;
|
||||||
|
|
||||||
public string $bridge;
|
public string $bridge;
|
||||||
|
|
||||||
public string $bridgeKey;
|
public /*stringable*/ $bridgeKey;
|
||||||
|
|
||||||
public string $bridgeForeignKey;
|
public /*stringable*/ $bridgeForeignKey;
|
||||||
|
|
||||||
public string $entity;
|
public string $entity;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ class EntityCollection extends \ArrayObject {
|
||||||
if ( $callback($item, $key, $idx) ) {
|
if ( $callback($item, $key, $idx) ) {
|
||||||
$idx++;
|
$idx++;
|
||||||
|
|
||||||
yield $item;
|
yield $key => $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,20 +30,45 @@ class EntityCollection extends \ArrayObject {
|
||||||
return $collection;
|
return $collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function searchOne($value, string $field) : ? object
|
public function removeOne($value, string $field, bool $strict = true) : ? object
|
||||||
{
|
{
|
||||||
# Returning first value only
|
foreach($this->search($value, $field, $strict) as $key => $item) {
|
||||||
foreach($this->search($value, $field) as $item) {
|
|
||||||
|
$this->offsetUnset($key);
|
||||||
|
|
||||||
return $item;
|
return $item;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function search($value, string $field) : Generator
|
public function remove($value, string $field, bool $strict = true) : array
|
||||||
{
|
{
|
||||||
foreach($this->filters(fn($v) => $v->$field === $value) as $item) {
|
$removed = [];
|
||||||
yield $item;
|
|
||||||
|
foreach($this->search($value, $field, $strict) as $key => $item) {
|
||||||
|
$this->offsetUnset($key);
|
||||||
|
|
||||||
|
$removed[] = $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function searchOne($value, string $field, bool $strict = true) : ? object
|
||||||
|
{
|
||||||
|
# Returning first value only
|
||||||
|
foreach($this->search($value, $field, $strict) as $item) {
|
||||||
|
return $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function search($value, string $field, bool $strict = true) : Generator
|
||||||
|
{
|
||||||
|
foreach($this->filters(fn($v) => $strict ? $v->$field === $value : $v->$field == $value) as $key => $item) {
|
||||||
|
yield $key => $item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ trait EntityTrait {
|
||||||
|
|
||||||
switch( $relationType ) {
|
switch( $relationType ) {
|
||||||
case 'onetoone':
|
case 'onetoone':
|
||||||
$repository->where( $baseEntity->field($relation->foreignKey), $this->$field );
|
$repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $baseEntity->field($relation->foreignKey), $this->$field );
|
||||||
|
|
||||||
$this->eventExecute(Event\EntityRelationLoadInterface::class, $name, $repository);
|
$this->eventExecute(Event\EntityRelationLoadInterface::class, $name, $repository);
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ trait EntityTrait {
|
||||||
return $this->$name = $result[0];
|
return $this->$name = $result[0];
|
||||||
|
|
||||||
case 'onetomany':
|
case 'onetomany':
|
||||||
$repository->where( $baseEntity->field($relation->foreignKey), $this->$field);
|
$repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $baseEntity->field($relation->foreignKey), $this->$field );
|
||||||
$this->eventExecute(Event\EntityRelationLoadInterface::class, $name, $repository);
|
$this->eventExecute(Event\EntityRelationLoadInterface::class, $name, $repository);
|
||||||
|
|
||||||
return $this->$name = call_user_func([$repository, $relation->function]);
|
return $this->$name = call_user_func([$repository, $relation->function]);
|
||||||
|
|
|
@ -68,12 +68,12 @@ class Repository
|
||||||
return Ulmus::runSelectQuery($this->queryBuilder, $this->adapter)->fetchColumn(0);
|
return Ulmus::runSelectQuery($this->queryBuilder, $this->adapter)->fetchColumn(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteOne()
|
protected function deleteOne()
|
||||||
{
|
{
|
||||||
return $this->limit(1)->deleteSqlQuery()->runQuery();
|
return $this->limit(1)->deleteSqlQuery()->runQuery();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteAll()
|
protected function deleteAll()
|
||||||
{
|
{
|
||||||
return $this->deleteSqlQuery()->runQuery();
|
return $this->deleteSqlQuery()->runQuery();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue