Переглянути джерело

improve collection handling and query parameter serialization

michelphp 2 тижнів тому
батько
коміт
ec19c1cd34

+ 10 - 0
src/Collection/ObjectStorage.php

@@ -163,4 +163,14 @@ class ObjectStorage extends SplObjectStorage
         $this->detach($object);
         return $this;
     }
+
+    public static function fromArray(array $data): self
+    {
+        return new self($data);
+    }
+
+    public static function fromObjectStorage(ObjectStorage $storage): self
+    {
+        return new self($storage->toArray());
+    }
 }

+ 2 - 2
src/Michel/Package/MichelPaperORMPackage.php

@@ -2,7 +2,7 @@
 
 namespace Michel\PaperORM\Michel\Package;
 
-use Michel\Michel\Package\PackageInterface;
+use Michel\Package\PackageInterface;
 use Michel\PaperORM\Collector\EntityDirCollector;
 use Michel\PaperORM\Command\DatabaseCreateCommand;
 use Michel\PaperORM\Command\DatabaseDropCommand;
@@ -30,7 +30,7 @@ class MichelPaperORMPackage implements PackageInterface
                 );
                 $logger = $container->get('paper.orm.logger');
                 if ($logger) {
-                    $paperConf->withLogger($container->get('paper.orm.logger'));
+                    $paperConf->withLogger($logger);
                 }
                 return $paperConf;
             },

+ 3 - 1
src/Migration/MigrationDirectory.php

@@ -10,7 +10,9 @@ final class MigrationDirectory
     public function __construct(string $dir)
     {
         if (!is_dir($dir)) {
-            throw new \InvalidArgumentException("Directory '$dir' does not exist.");
+            if (!mkdir($dir, 0777, true)) {
+                throw new \InvalidArgumentException("Cannot create directory '$dir', check permissions.");
+            }
         }
 
         if (!is_writable($dir)) {

+ 4 - 4
src/Query/QueryBuilder.php

@@ -424,14 +424,14 @@ final class QueryBuilder
                 $value = $value->getPrimaryKeyValue();
             }elseif (is_iterable($value)) {
                 $values = [];
-                foreach ($value as $k => $v) {
+                foreach ($value as $v) {
                     if ($v instanceof EntityInterface) {
-                        $values[$k] = $v->getPrimaryKeyValue();
+                        $values[] = $v->getPrimaryKeyValue();
                     }else {
-                        $values[$k] = $v;
+                        $values[] = $v;
                     }
                 }
-                $value = $values;
+                $value = implode(',', $values);
             }
 
             $joinQl->setParam($key, $value);