Nextras\Orm\Repository\PersistenceHelper::getCascadeQueue PHP Метод

getCascadeQueue() публичный статический Метод

См. также: https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search
public static getCascadeQueue ( Nextras\Orm\Entity\IEntity $entity, Nextras\Orm\Model\IModel $model, boolean $withCascade ) : array
$entity Nextras\Orm\Entity\IEntity
$model Nextras\Orm\Model\IModel
$withCascade boolean
Результат array
    public static function getCascadeQueue(IEntity $entity, IModel $model, $withCascade)
    {
        try {
            self::visitEntity($entity, $model, $withCascade);
            for ($i = 0; $i < count(self::$inputQueue); $i++) {
                $value = self::$inputQueue[$i];
                if ($value instanceof IEntity) {
                    self::visitEntity($value, $model);
                } else {
                    self::visitRelationship($value, $model);
                }
            }
            return self::$outputQueue;
        } finally {
            self::$inputQueue = [];
            self::$outputQueue = [];
        }
    }

Usage Example

Пример #1
0
 /** @inheritdoc */
 public function persist(IEntity $entity, $withCascade = true)
 {
     $queue = PersistenceHelper::getCascadeQueue($entity, $this, $withCascade);
     foreach ($queue as $object) {
         if ($object instanceof IEntity) {
             $repository = $this->configuration[2][get_class($object)];
             $this->loader->getRepository($repository)->doPersist($object);
         } elseif ($object instanceof IRelationshipCollection) {
             $object->doPersist();
         }
     }
     return $entity;
 }