1: <?php
2:
3: namespace PHPixie\ORM\Models\Type;
4:
5: class Database extends \PHPixie\ORM\Models\Model
6: {
7: 8: 9:
10: protected $database;
11:
12: 13: 14:
15: protected $drivers;
16:
17: 18: 19:
20: protected $conditions;
21:
22: 23: 24:
25: protected $mappers;
26:
27: 28: 29:
30: protected $values;
31:
32: protected $repositories = array();
33:
34: public function __construct($models, $configs, $database, $drivers)
35: {
36: parent::__construct($models, $configs);
37:
38: $this->database = $database;
39: $this->drivers = $drivers;
40: }
41:
42: protected function buildConfig($modelName, $configSlice)
43: {
44: $connectionName = $configSlice->get('connection', 'default');
45: $driverName = $this->database->connectionDriverName($connectionName);
46: $driver = $this->drivers->get($driverName);
47: return $driver->config($modelName, $configSlice);
48: }
49:
50: protected function buildRepository($modelName)
51: {
52: $config = $this->config($modelName);
53: $driver = $this->drivers->get($config->driver);
54:
55: $repository = $driver->repository($config);
56:
57: if($this->hasWrapper('databaseRepositories', $config->model)) {
58: $repository = $this->wrappers->databaseRepositoryWrapper($repository);
59: }
60:
61: return $repository;
62: }
63:
64: 65: 66: 67:
68: public function repository($modelName)
69: {
70: if(!array_key_exists($modelName, $this->repositories)) {
71: $this->repositories[$modelName] = $this->buildRepository($modelName);
72: }
73:
74: return $this->repositories[$modelName];
75: }
76:
77: 78: 79: 80: 81: 82:
83: public function entity($modelName, $data, $isNew)
84: {
85: $repository = $this->repository($modelName);
86: $config = $repository->config();
87: $driver = $this->drivers->get($config->driver);
88:
89: $entity = $driver->entity(
90: $repository,
91: $data,
92: $isNew
93: );
94:
95: if($this->hasWrapper('databaseEntities', $config->model)) {
96: $entity = $this->wrappers->databaseEntityWrapper($entity);
97: }
98:
99: return $entity;
100: }
101:
102: 103: 104: 105: 106:
107: public function query($modelName)
108: {
109: $config = $this->config($modelName);
110: $driver = $this->drivers->get($config->driver);
111: $query = $driver->query($config);
112:
113: if($this->hasWrapper('databaseQueries', $config->model)) {
114: $query = $this->wrappers->databaseQueryWrapper($query);
115: }
116:
117: return $query;
118: }
119:
120: public function type()
121: {
122: return 'database';
123: }
124:
125: }