Skip to content

Commit a230f75

Browse files
committed
register drivers with interface class name, updated readme
1 parent d83e1ff commit a230f75

File tree

2 files changed

+86
-9
lines changed

2 files changed

+86
-9
lines changed

README.md

+74-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ After that you have to register the class in the [DriverFactory](src/Driver/Driv
6363
```php
6464
<?php
6565

66-
\Aternos\Model\Driver\DriverFactory::getInstance()->registerDriver('Relational', '\\MyModel\\Mysqli');
66+
\Aternos\Model\Driver\DriverFactory::getInstance()->registerDriver(
67+
\Aternos\Model\Driver\Relational\RelationalDriverInterface::class,
68+
\MyModel\Mysqli::class
69+
);
6770
```
6871

6972
### Model
@@ -140,6 +143,76 @@ $user->save();
140143
$user->delete();
141144
```
142145

146+
### Query
147+
You can query the model using a [Query](src/Query/Query.php) object, e.g. [SelectQuery](src/Query/SelectQuery.php).
148+
It allows different syntax possibilities such as simple array/string/int values directly passed to the constructor or
149+
building all parameters as objects based on the [Query/...](src/Query) classes. All queries return a [QueryResult](src/Query/QueryResult.php)
150+
object, which is iterable and countable.
151+
152+
```php
153+
<?php
154+
155+
// the following lines are all the same
156+
User::select(["email" => "[email protected]"]); // ::select() is only a helper function of GenericModel
157+
User::query(new \Aternos\Model\Query\SelectQuery(["email" => "[email protected]"]));
158+
User::query((new \Aternos\Model\Query\SelectQuery())->where(["email" => "[email protected]"]));
159+
User::query(new \Aternos\Model\Query\SelectQuery(
160+
new \Aternos\Model\Query\WhereCondition("email", "[email protected]")
161+
));
162+
User::query(new \Aternos\Model\Query\SelectQuery(
163+
new \Aternos\Model\Query\WhereGroup([
164+
new \Aternos\Model\Query\WhereCondition("email", "[email protected]")
165+
])
166+
));
167+
168+
// use the result
169+
$userQueryResult = User::select(["email" => "[email protected]"]);
170+
171+
if (!$userQueryResult->wasSuccessful()) {
172+
echo "Query failed";
173+
}
174+
175+
echo "Found " . count($userQueryResult) . " users";
176+
177+
foreach($userQueryResult as $user) {
178+
/** @var User $user */
179+
echo $user->username;
180+
}
181+
182+
// another query example
183+
User::select(
184+
["field" => "value", "hello" => "world", "foo" => "bar"],
185+
["field" => "ASC", "hello" => "DESC", "foo" => "ASC"],
186+
["field", "hello", "foo"],
187+
[100, 10]
188+
);
189+
// can also be written as
190+
User::query((new \Aternos\Model\Query\SelectQuery)
191+
->where(["field" => "value", "hello" => "world", "foo" => "bar"])
192+
->orderBy(["field" => "ASC", "hello" => "DESC", "foo" => "ASC"])
193+
->fields(["field", "hello", "foo"])
194+
->limit([100, 10])
195+
);
196+
197+
// a more complex query with nested where groups using the query parameter classes
198+
User::query(new \Aternos\Model\Query\SelectQuery(
199+
new \Aternos\Model\Query\WhereGroup([
200+
new \Aternos\Model\Query\WhereCondition("field", "value", "<>"),
201+
new \Aternos\Model\Query\WhereGroup([
202+
new \Aternos\Model\Query\WhereCondition("hello", "world"),
203+
new \Aternos\Model\Query\WhereCondition("foo", "bar")
204+
], \Aternos\Model\Query\WhereGroup:: OR)
205+
]),
206+
[
207+
new \Aternos\Model\Query\OrderField("field", \Aternos\Model\Query\OrderField::DESCENDING),
208+
new \Aternos\Model\Query\OrderField("hello", \Aternos\Model\Query\OrderField::ASCENDING),
209+
new \Aternos\Model\Query\OrderField("foo", \Aternos\Model\Query\OrderField::DESCENDING)
210+
],
211+
["field", "hello", "foo"],
212+
new \Aternos\Model\Query\Limit(10, 100)
213+
));
214+
```
215+
143216
## Advanced usage
144217
*More information about more advanced usage, such as writing your own drivers, driver factory or models
145218
will be added in the future, in the meantime just take a look at the source code.*

src/Driver/DriverFactory.php

+12-8
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
namespace Aternos\Model\Driver;
44

55
use Aternos\Model\Driver\Cache\CacheDriverInterface;
6+
use Aternos\Model\Driver\Cache\Redis;
7+
use Aternos\Model\Driver\NoSQL\Cassandra;
68
use Aternos\Model\Driver\NoSQL\NoSQLDriverInterface;
9+
use Aternos\Model\Driver\Relational\Mysqli;
710
use Aternos\Model\Driver\Relational\RelationalDriverInterface;
11+
use Aternos\Model\Driver\Search\Elasticsearch;
812
use Aternos\Model\Driver\Search\SearchDriverInterface;
913

1014
/**
@@ -20,10 +24,10 @@ class DriverFactory implements DriverFactoryInterface
2024
* @var array
2125
*/
2226
protected $drivers = [
23-
"Cache" => "\\Aternos\\Model\\Driver\\Cache\\Redis",
24-
"NoSQL" => "\\Aternos\\Model\\Driver\\NoSQL\\Cassandra",
25-
"Relational" => "\\Aternos\\Model\\Driver\\Relational\\Mysqli",
26-
"Search" => "\\Aternos\\Model\\Driver\\Search\\Elasticsearch"
27+
CacheDriverInterface::class => Redis::class,
28+
NoSQLDriverInterface::class => Cassandra::class,
29+
RelationalDriverInterface::class => Mysqli::class,
30+
SearchDriverInterface::class => Elasticsearch::class
2731
];
2832

2933
/**
@@ -70,7 +74,7 @@ public function assembleCacheDriver(): CacheDriverInterface
7074
/**
7175
* @var CacheDriverInterface $cacheDriver
7276
*/
73-
$cacheDriver = $this->assembleDriver("Cache");
77+
$cacheDriver = $this->assembleDriver(CacheDriverInterface::class);
7478

7579
return $cacheDriver;
7680
}
@@ -85,7 +89,7 @@ public function assembleNoSQLDriver(): NoSQLDriverInterface
8589
/**
8690
* @var NoSQLDriverInterface $nosqlDriver
8791
*/
88-
$nosqlDriver = $this->assembleDriver("NoSQL");
92+
$nosqlDriver = $this->assembleDriver(NoSQLDriverInterface::class);
8993

9094
return $nosqlDriver;
9195
}
@@ -100,7 +104,7 @@ public function assembleRelationalDriver(): RelationalDriverInterface
100104
/**
101105
* @var RelationalDriverInterface $relationalDriver
102106
*/
103-
$relationalDriver = $this->assembleDriver("Relational");
107+
$relationalDriver = $this->assembleDriver(RelationalDriverInterface::class);
104108

105109
return $relationalDriver;
106110
}
@@ -115,7 +119,7 @@ public function assembleSearchDriver(): SearchDriverInterface
115119
/**
116120
* @var SearchDriverInterface $searchDriver
117121
*/
118-
$searchDriver = $this->assembleDriver("Search");
122+
$searchDriver = $this->assembleDriver(SearchDriverInterface::class);
119123

120124
return $searchDriver;
121125
}

0 commit comments

Comments
 (0)