@@ -63,7 +63,10 @@ After that you have to register the class in the [DriverFactory](src/Driver/Driv
63
63
``` php
64
64
<?php
65
65
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
+ );
67
70
```
68
71
69
72
### Model
@@ -140,6 +143,76 @@ $user->save();
140
143
$user->delete();
141
144
```
142
145
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
+
143
216
## Advanced usage
144
217
* More information about more advanced usage, such as writing your own drivers, driver factory or models
145
218
will be added in the future, in the meantime just take a look at the source code.*
0 commit comments