1: <?php
2:
3: namespace PHPixie\ORM\Planners\Planner\Pivot\Strategy;
4:
5: class Multiquery extends \PHPixie\ORM\Planners\Planner\Pivot\Strategy
6: {
7: public function link($pivot, $firstSide, $secondSide, $plan)
8: {
9: $resultFilters = array();
10: foreach (array($firstSide, $secondSide) as $side) {
11: $idQuery = $this->idQuery($side, $plan);
12: $resultStep = $this->steps->iteratorResult($idQuery);
13: $idField = $side->repository()->config()->idField;
14: $resultFilter = $this->steps->resultFilter($resultStep, array($idField));
15: $plan->add($resultStep);
16: $resultFilters[] = $resultFilter;
17: }
18:
19: $cartesianStep = $this->steps->pivotCartesian(
20: array(
21: $firstSide->pivotKey(),
22: $secondSide->pivotKey()
23: ),
24: $resultFilters
25: );
26:
27: $plan->add($cartesianStep);
28:
29: $selectQuery = $pivot->databaseSelectQuery();
30: $uniqueDataStep = $this->steps->uniqueDataInsert($cartesianStep, $selectQuery);
31: $plan->add($uniqueDataStep);
32:
33: $insertQuery = $pivot->databaseInsertQuery();
34: $insertStep = $this->steps->batchInsert($insertQuery, $uniqueDataStep);
35: $plan->add($insertStep);
36: }
37: }
38: