- Bugfix within PdoObject and Repository

- Added some utilities methods to EntityCollection
This commit is contained in:
Dave Mc Nicoll 2020-03-19 09:55:00 -04:00
parent d03f9ece36
commit 4b29232543
3 changed files with 13 additions and 4 deletions

View File

@ -8,6 +8,8 @@ use PDO,
class PdoObject extends PDO {
public function select(string $sql, array $parameters = []): PDOStatement {
# var_dump($sql, $parameters); die();
try {
if (false !== ( $statement = $this->prepare($sql) )) {
$statement = $this->execute($statement, $parameters, false);
@ -21,6 +23,8 @@ class PdoObject extends PDO {
}
public function runQuery(string $sql, array $parameters = []): ? PDOStatement {
# dump($sql, $parameters); return null;
try {
if (false !== ( $statement = $this->prepare($sql) )) {
return $this->execute($statement, $parameters, true);

View File

@ -30,12 +30,14 @@ class EntityCollection extends \ArrayObject {
return $collection;
}
public function searchOne($value, string $field) : object
public function searchOne($value, string $field) : ? object
{
# Returning first value only
foreach($this->search($value, $field) as $item) {
return $item;
}
return null;
}
public function search($value, string $field) : Generator

View File

@ -105,9 +105,7 @@ class Repository
throw new \Exception(sprintf("No primary key found for entity %s", $this->entityClass));
}
$diff = array_diff_assoc($dataset, $entity->entityGetDataset(true));
if ( [] !== $diff ) {
if ( [] !== $diff = $this->generateDatasetDiff($entity) ) {
$pkField = key($primaryKeyDefinition);
$pkFieldName = $primaryKeyDefinition[$pkField]->name ?? $pkField;
$this->where($pkFieldName, $dataset[$pkFieldName]);
@ -128,6 +126,11 @@ class Repository
}
}
public function generateDatasetDiff(object $entity) : array
{
return array_diff_assoc( array_change_key_case($entity->toArray()), array_change_key_case($entity->entityGetDataset(true)) );
}
public function yieldAll() : \Generator
{