- Some bugfixes were made, added a new diff before saving results. Also, a new method was added for insert, update and delete respectively for other drivers to override as needed
This commit is contained in:
1 parent
58afe841e7
commit
dc5e088551
7 files changed
+111
-29
No files matched your search
+50
-8
@@ -56,6 +56,11 @@ class Repository
|
||||
return $this->collectionFromQuery();
|
||||
}
|
||||
|
||||
public function loadAllFromField($field, $value) : EntityCollection
|
||||
{
|
||||
return $this->loadFromField($field, $value);
|
||||
}
|
||||
|
||||
public function loadFromField($field, $value) : EntityCollection
|
||||
{
|
||||
return $this->where($field, $value)->collectionFromQuery();
|
||||
@@ -81,12 +86,12 @@ class Repository
|
||||
|
||||
public function deleteOne()
|
||||
{
|
||||
return $this->limit(1)->deleteSqlQuery()->runQuery();
|
||||
return $this->limit(1)->deleteSqlQuery()->runDeleteQuery();
|
||||
}
|
||||
|
||||
public function deleteAll()
|
||||
{
|
||||
return $this->deleteSqlQuery()->runQuery();
|
||||
return $this->deleteSqlQuery()->runDeleteQuery();
|
||||
}
|
||||
|
||||
public function deleteFromPk($value) : bool
|
||||
@@ -140,7 +145,7 @@ class Repository
|
||||
$primaryKeyDefinition = Ulmus::resolveEntity($this->entityClass)->getPrimaryKeyField();
|
||||
|
||||
if ( ! $entity->isLoaded() ) {
|
||||
$statement = $this->insertSqlQuery($fieldsAndValue ?? $dataset, $replace)->runQuery();
|
||||
$statement = $this->insertSqlQuery($fieldsAndValue ?? $dataset, $replace)->runInsertQuery();
|
||||
|
||||
if ( ( 0 !== $statement->lastInsertId ) &&
|
||||
( null !== $primaryKeyDefinition )) {
|
||||
@@ -156,16 +161,16 @@ class Repository
|
||||
throw new \Exception(sprintf("No primary key found for entity %s", $this->entityClass));
|
||||
}
|
||||
|
||||
$diff = $fieldsAndValue ?? $this->generateDatasetDiff($entity);
|
||||
$diff = $fieldsAndValue ?? $this->generateWritableDataset($entity);
|
||||
|
||||
if ( [] !== $diff ) {
|
||||
$pkField = key($primaryKeyDefinition);
|
||||
$pkFieldName = $primaryKeyDefinition[$pkField]->name ?? $pkField;
|
||||
$this->where($pkFieldName, $dataset[$pkFieldName]);
|
||||
|
||||
$update = $this->updateSqlQuery($diff)->runQuery();
|
||||
$update = $this->updateSqlQuery($diff)->runUpdateQuery();
|
||||
|
||||
$entity->entityFillFromDataset($dataset);
|
||||
$entity->entityFillFromDataset($dataset, true);
|
||||
|
||||
return $update ? (bool) $update->rowCount() : false;
|
||||
}
|
||||
@@ -220,6 +225,22 @@ class Repository
|
||||
return array_diff_assoc($oldValues ? $dataset : $array , $oldValues ? $array : $dataset );
|
||||
}
|
||||
|
||||
|
||||
public function generateWritableDataset(object $entity, bool $oldValues = false) : array
|
||||
{
|
||||
$intersect = [];
|
||||
|
||||
$dataset = $this->generateDatasetDiff($entity, $oldValues);
|
||||
|
||||
foreach($dataset as $field => $value) {
|
||||
if ( false === ( $this->entityResolver->searchFieldAnnotation($field, new Field, false)->readonly ?? false ) ) {
|
||||
$intersect[$field] = $field;
|
||||
}
|
||||
}
|
||||
|
||||
return array_intersect_key($dataset, $intersect);
|
||||
}
|
||||
|
||||
public function yield() : \Generator
|
||||
{
|
||||
$class = $this->entityClass;
|
||||
@@ -482,7 +503,7 @@ class Repository
|
||||
}
|
||||
|
||||
foreach($this->entityResolver->searchFieldAnnotationList($item, new Filter() ) as $filter) {
|
||||
call_user_func_array([ $this->entityClass, $filter->method ], [ $this, $item ]);
|
||||
call_user_func_array([ $this->entityClass, $filter->method ], [ $this, $item, true ]);
|
||||
}
|
||||
|
||||
$this->close();
|
||||
@@ -508,7 +529,7 @@ class Repository
|
||||
}
|
||||
|
||||
foreach($this->entityResolver->searchFieldAnnotationList($item, new FilterJoin() ) as $filter) {
|
||||
call_user_func_array([ $this->entityClass, $filter->method ], [ $join, $item ]);
|
||||
call_user_func_array([ $this->entityClass, $filter->method ], [ $join, $item, true ]);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -617,6 +638,27 @@ class Repository
|
||||
return Ulmus::runQuery($this->queryBuilder, $this->adapter);
|
||||
}
|
||||
|
||||
public function runInsertQuery() /* : mixed */
|
||||
{
|
||||
$this->finalizeQuery();
|
||||
|
||||
return Ulmus::runInsertQuery($this->queryBuilder, $this->adapter);
|
||||
}
|
||||
|
||||
public function runUpdateQuery() /* : mixed */
|
||||
{
|
||||
$this->finalizeQuery();
|
||||
|
||||
return Ulmus::runUpdateQuery($this->queryBuilder, $this->adapter);
|
||||
}
|
||||
|
||||
public function runDeleteQuery() /* : mixed */
|
||||
{
|
||||
$this->finalizeQuery();
|
||||
|
||||
return Ulmus::runDeleteQuery($this->queryBuilder, $this->adapter);
|
||||
}
|
||||
|
||||
public function resetQuery() : self
|
||||
{
|
||||
$this->queryBuilder->reset();
|
||||
|
||||
Reference in new issue
Block a user