Example #1
0
 private function buildTreeMeta($class)
 {
     $meta = $this->manager->getMeta($class);
     $ext = isset($meta->ext['nestedSet']) ? $meta->ext['nestedSet'] : null;
     if (!$ext) {
         throw new \InvalidArgumentException("{$class} did not define nestedSet extension");
     }
     if (!$meta->primary || isset($meta->primary[2])) {
         throw new \UnexpectedValueException("Class {$class} must have a one-column primary for use with nested sets");
     }
     $leftField = isset($ext['leftId']) ? $ext['leftId'] : 'treeLeft';
     $rightField = isset($ext['rightId']) ? $ext['rightId'] : 'treeRight';
     $parentField = isset($ext['parentId']) ? $ext['parentId'] : 'parentId';
     $fields = $meta->fields;
     $treeMeta = (object) array('meta' => $meta, 'leftId' => isset($fields[$leftField]) ? $leftField : null, 'rightId' => isset($fields[$rightField]) ? $rightField : null, 'parentId' => isset($fields[$parentField]) ? $parentField : null, 'parentRel' => null, 'parentsRel' => null, 'treeRel' => null);
     foreach ($meta->relations as $id => $rel) {
         if ($rel[0] == 'parent') {
             $treeMeta->parentRel = $id;
         } elseif ($rel[0] == 'parents') {
             $treeMeta->parentsRel = $id;
         } elseif ($rel[0] == 'tree') {
             $treeMeta->treeRel = $id;
         }
     }
     $missing = array();
     foreach ($treeMeta as $k => $v) {
         if ($v === null) {
             $missing[] = $k;
         }
     }
     if ($missing) {
         throw new \UnexpectedValueException("Missing nestedSet keys: " . implode(", ", $missing));
     }
     return $treeMeta;
 }
 public function testDeleteObjectWithoutPrimaryFails()
 {
     $mapper = new \Amiss\Test\Helper\TestMapper(array(Demo\Artist::class => new \Amiss\Meta(Demo\Artist::class, ['table' => 'artist'])));
     $manager = new \Amiss\Sql\Manager($this->manager->connector, $mapper);
     $this->setExpectedException(\Amiss\Exception::class);
     $manager->delete($this->artist);
 }