1: <?php
2:
3: namespace PHPixie\ORM\Steps\Step\Pivot;
4:
5: class Cartesian extends \PHPixie\ORM\Steps\Step\Query\Insert\Batch\Data
6: {
7: protected $fields;
8: protected $resultFilters;
9:
10: public function __construct($fields, $resultFilters)
11: {
12: $this->fields = $fields;
13: $this->resultFilters = $resultFilters;
14: }
15:
16: public function fields()
17: {
18: return $this->fields;
19: }
20:
21: public function execute()
22: {
23: $this->data = $this->buildProduct();
24: }
25:
26: protected function buildProduct()
27: {
28: if (empty($this->resultFilters))
29: return array();
30:
31: $product = array(array());
32: foreach ($this->resultFilters as $resultFilter) {
33: $rows = $resultFilter->getFilteredData();
34: $product = $this->updateProduct($product, $rows);
35: if (empty($product))
36: break;
37: }
38:
39: return $product;
40:
41: }
42:
43: protected function updateProduct($product, $rows)
44: {
45: $updatedProduct = array();
46: foreach($product as $productRow) {
47: $productRow = $productRow;
48: foreach($rows as $item) {
49: $updatedProduct[] = array_merge($productRow, array_values($item));
50: }
51: }
52: return $updatedProduct;
53: }
54:
55: }
56: