1: <?php
2:
3: namespace PHPixie\ORM\Mappers\Cascade\Mapper;
4:
5: class Delete extends \PHPixie\ORM\Mappers\Cascade\Mapper
6: {
7: protected $models;
8: protected $planners;
9: protected $steps;
10:
11: public function __construct($mappers, $relationships, $models, $planners, $steps, $cascadeDeletMap)
12: {
13: parent::__construct($mappers, $relationships, $cascadeDeletMap);
14: $this->models = $models;
15: $this->planners = $planners;
16: $this->steps = $steps;
17: }
18:
19: public function handleResult($reusableResult, $modelName, $plan, $path)
20: {
21: $this->assertDirectionalPath($path, $modelName);
22:
23: $sides = $this->cascadeMap->getModelSides($modelName);
24: foreach($sides as $side) {
25: $sidePath = $path->copy();
26: $sidePath->addSide($side);
27: $relationship = $this->relationships->get($side->relationshipType());
28: $handler = $relationship->handler();
29: $handler->handleDelete($side, $reusableResult, $plan, $sidePath);
30: }
31: }
32:
33: public function handleQuery($selectQuery, $modelName, $plan, $path)
34: {
35: $repository = $this->models->database()->repository($modelName);
36: $deleteQuery = $repository->databaseDeleteQuery();
37:
38: $this->mapDeleteQuery($deleteQuery, $selectQuery, $modelName, $plan, $path);
39:
40: $deleteStep = $this->steps->query($deleteQuery);
41: $plan->add($deleteStep);
42: }
43:
44: public function map($deleteQuery, $selectQuery, $modelName, $plan)
45: {
46: $path = $this->mappers->cascadePath();
47: $this->mapDeleteQuery($deleteQuery, $selectQuery, $modelName, $plan, $path);
48: }
49:
50: protected function mapDeleteQuery($deleteQuery, $selectQuery, $modelName, $plan, $path)
51: {
52: $resultStep = $this->steps->reusableResult($selectQuery);
53: $plan->add($resultStep);
54: $this->handleResult($resultStep, $modelName, $plan, $path);
55:
56: $repository = $this->models->database()->repository($modelName);
57: $idField = $repository->config()->idField;
58: $this->planners->in()->result(
59: $deleteQuery,
60: $idField,
61: $resultStep,
62: $idField,
63: $plan
64: );
65: }
66:
67: }