Skip to content

Commit ad6598d

Browse files
committed
readme upd
1 parent 2eaafb7 commit ad6598d

File tree

1 file changed

+93
-106
lines changed

1 file changed

+93
-106
lines changed

README.md

Lines changed: 93 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ use app\models\Comment;
3434

3535
// Выбираем адреса с городом, местами и комментариями о местах
3636
$result = QueryRelationManager::select(Address::class, 'a')
37-
->withSingle('city', City::class, 'c', 'a', 'id', 'city_id')
38-
->withMultiple('places', Place::class, 'p', 'a', 'address_id', 'id')
39-
->withMultiple('comments', Comment::class, 'cm', 'p', 'place_id', 'id')
37+
->withSingle('city', City::class, 'c', 'a', ['id' => 'city_id'])
38+
->withMultiple('places', Place::class, 'p', 'a', ['address_id' => 'id'])
39+
->withMultiple('comments', Comment::class, 'cm', 'p', ['place_id' => 'id'])
4040
->all();
4141

4242
print_r($result);
@@ -47,6 +47,12 @@ print_r($result);
4747
[id] => 1
4848
[city_id] => 1
4949
[name] => Tverskaya st., 7
50+
[city] => Array
51+
(
52+
[id] => 1
53+
[name] => Moscow
54+
)
55+
5056
[places] => Array
5157
(
5258
[0] => Array
@@ -100,19 +106,19 @@ print_r($result);
100106

101107
)
102108

103-
[city] => Array
104-
(
105-
[id] => 1
106-
[name] => Moscow
107-
)
108-
109109
)
110110

111111
[1] => Array
112112
(
113113
[id] => 2
114114
[city_id] => 1
115115
[name] => Schipok st., 1
116+
[city] => Array
117+
(
118+
[id] => 1
119+
[name] => Moscow
120+
)
121+
116122
[places] => Array
117123
(
118124
[0] => Array
@@ -137,19 +143,19 @@ print_r($result);
137143

138144
)
139145

140-
[city] => Array
141-
(
142-
[id] => 1
143-
[name] => Moscow
144-
)
145-
146146
)
147147

148148
[2] => Array
149149
(
150150
[id] => 3
151151
[city_id] => 2
152152
[name] => Mayakovskogo st., 12
153+
[city] => Array
154+
(
155+
[id] => 2
156+
[name] => St. Petersburg
157+
)
158+
153159
[places] => Array
154160
(
155161
[0] => Array
@@ -185,19 +191,19 @@ print_r($result);
185191

186192
)
187193

188-
[city] => Array
189-
(
190-
[id] => 2
191-
[name] => St. Petersburg
192-
)
193-
194194
)
195195

196196
[3] => Array
197197
(
198198
[id] => 4
199199
[city_id] => 2
200200
[name] => Galernaya st., 3
201+
[city] => Array
202+
(
203+
[id] => 2
204+
[name] => St. Petersburg
205+
)
206+
201207
[places] => Array
202208
(
203209
[0] => Array
@@ -222,12 +228,6 @@ print_r($result);
222228

223229
)
224230

225-
[city] => Array
226-
(
227-
[id] => 2
228-
[name] => St. Petersburg
229-
)
230-
231231
)
232232

233233
)*/
@@ -238,36 +238,23 @@ print_r($result);
238238
// - если подходящих комментариев нет, место не попадает в выборку (inner join)
239239
// - для каждого места считаем количество комментариев, количество оценок "5" и среднюю оценку среди оценок не ниже 3
240240
$result = QueryRelationManager::select(Place::class, 'p')
241-
->withSingle('address', Address::class, 'a', 'p', 'id', 'address_id')
242-
->withSingle('city', City::class, 'c', 'a', 'id', 'city_id')
243-
->withMultiple('comments', Comment::class, 'cm', 'p', 'place_id', 'id',
241+
->withSingle('address', Address::class, 'a', 'p', ['id' => 'address_id'])
242+
->withSingle('city', City::class, 'c', 'a', ['id' => 'city_id'])
243+
->withMultiple('comments', Comment::class, 'cm', 'p', ['place_id' => 'id'],
244244
'inner', 'and cm.mark >= :mark', [':mark' => 3])
245-
->modify('cm', function(array &$comment, array &$place) {
246-
if(!isset($place['comments_count'])) {
247-
$place['comments_count'] = 0;
248-
}
249-
250-
if(!isset($place['mark_five_count'])) {
251-
$place['mark_five_count'] = 0;
252-
}
253-
254-
if(!isset($place['mark_average'])) {
255-
$place['mark_average'] = 0;
256-
}
257-
258-
$place['comments_count']++;
259-
$place['mark_average'] += $comment['mark'];
260-
261-
if($comment['mark'] == 5) {
262-
$place['mark_five_count']++;
263-
}
264-
})
265245
->modify('p', function(array &$place) {
266-
if(!isset($place['mark_average'])) {
267-
$place['mark_average'] = 0;
268-
} else {
269-
$place['mark_average'] /= $place['comments_count'];
246+
$place['comments_count'] = count($place['comments']);
247+
$place['mark_five_count'] = 0;
248+
$place['mark_average'] = 0;
249+
250+
foreach($place['comments'] as $comment) {
251+
$place['mark_average'] += $comment['mark'];
252+
if($comment['mark'] == 5) {
253+
$place['mark_five_count']++;
254+
}
270255
}
256+
257+
$place['mark_average'] /= $place['comments_count'];
271258
})
272259
->all();
273260

@@ -279,6 +266,19 @@ print_r($result);
279266
[id] => 1
280267
[address_id] => 1
281268
[name] => TC Tverskoy
269+
[address] => Array
270+
(
271+
[id] => 1
272+
[city_id] => 1
273+
[name] => Tverskaya st., 7
274+
[city] => Array
275+
(
276+
[id] => 1
277+
[name] => Moscow
278+
)
279+
280+
)
281+
282282
[comments] => Array
283283
(
284284
[0] => Array
@@ -301,11 +301,21 @@ print_r($result);
301301

302302
)
303303

304+
[comments_count] => 2
305+
[mark_five_count] => 1
306+
[mark_average] => 4
307+
)
308+
309+
[1] => Array
310+
(
311+
[id] => 3
312+
[address_id] => 2
313+
[name] => Stasova music school
304314
[address] => Array
305315
(
306-
[id] => 1
316+
[id] => 2
307317
[city_id] => 1
308-
[name] => Tverskaya st., 7
318+
[name] => Schipok st., 1
309319
[city] => Array
310320
(
311321
[id] => 1
@@ -314,16 +324,6 @@ print_r($result);
314324

315325
)
316326

317-
[comments_count] => 2
318-
[mark_five_count] => 1
319-
[mark_average] => 4
320-
)
321-
322-
[1] => Array
323-
(
324-
[id] => 3
325-
[address_id] => 2
326-
[name] => Stasova music school
327327
[comments] => Array
328328
(
329329
[0] => Array
@@ -337,19 +337,6 @@ print_r($result);
337337

338338
)
339339

340-
[address] => Array
341-
(
342-
[id] => 2
343-
[city_id] => 1
344-
[name] => Schipok st., 1
345-
[city] => Array
346-
(
347-
[id] => 1
348-
[name] => Moscow
349-
)
350-
351-
)
352-
353340
[comments_count] => 1
354341
[mark_five_count] => 1
355342
[mark_average] => 5
@@ -360,6 +347,19 @@ print_r($result);
360347
[id] => 5
361348
[address_id] => 3
362349
[name] => Mayakovskiy Store
350+
[address] => Array
351+
(
352+
[id] => 3
353+
[city_id] => 2
354+
[name] => Mayakovskogo st., 12
355+
[city] => Array
356+
(
357+
[id] => 2
358+
[name] => St. Petersburg
359+
)
360+
361+
)
362+
363363
[comments] => Array
364364
(
365365
[0] => Array
@@ -373,11 +373,21 @@ print_r($result);
373373

374374
)
375375

376+
[comments_count] => 1
377+
[mark_five_count] => 0
378+
[mark_average] => 4
379+
)
380+
381+
[3] => Array
382+
(
383+
[id] => 6
384+
[address_id] => 4
385+
[name] => Cafe on Galernaya
376386
[address] => Array
377387
(
378-
[id] => 3
388+
[id] => 4
379389
[city_id] => 2
380-
[name] => Mayakovskogo st., 12
390+
[name] => Galernaya st., 3
381391
[city] => Array
382392
(
383393
[id] => 2
@@ -386,16 +396,6 @@ print_r($result);
386396

387397
)
388398

389-
[comments_count] => 1
390-
[mark_five_count] => 0
391-
[mark_average] => 4
392-
)
393-
394-
[3] => Array
395-
(
396-
[id] => 6
397-
[address_id] => 4
398-
[name] => Cafe on Galernaya
399399
[comments] => Array
400400
(
401401
[0] => Array
@@ -409,19 +409,6 @@ print_r($result);
409409

410410
)
411411

412-
[address] => Array
413-
(
414-
[id] => 4
415-
[city_id] => 2
416-
[name] => Galernaya st., 3
417-
[city] => Array
418-
(
419-
[id] => 2
420-
[name] => St. Petersburg
421-
)
422-
423-
)
424-
425412
[comments_count] => 1
426413
[mark_five_count] => 0
427414
[mark_average] => 3
@@ -433,7 +420,7 @@ print_r($result);
433420
// Получаем города из списка ID с адресами
434421
$cityIds = City::find()->limit(2)->offset(1)->select('id')->column();
435422
$result = QueryRelationManager::select(City::class, 'c')
436-
->withMultiple('addresses', Address::class, 'a', 'c', 'city_id', 'id')
423+
->withMultiple('addresses', Address::class, 'a', 'c', ['city_id' => 'id'])
437424
->filter(function(Query $q) use ($cityIds) {
438425
$q->andWhere(['c.id' => $cityIds])->orderBy(['a.id' => SORT_ASC]);
439426
})
@@ -481,7 +468,7 @@ print_r($result);
481468

482469
// Используем QueryRelationDataProvider для пагинации
483470
$qrm = QueryRelationManager::select(City::class, 'c')
484-
->withMultiple('addresses', Address::class, 'a', 'c', 'city_id', 'id');
471+
->withMultiple('addresses', Address::class, 'a', 'c', ['city_id' => 'id']);
485472

486473
$dataProvider = new QueryRelationDataProvider([
487474
'queryRelationManager' => $qrm,

0 commit comments

Comments
 (0)