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); }