Skip to content

Commit 679c278

Browse files
committed
process Relationship Queries
1 parent d0d0e10 commit 679c278

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

src/Database/Database.php

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3376,7 +3376,10 @@ public function getDocument(string $collection, string $id, array $queries = [],
33763376
[$selects, $permissionsAdded] = Query::addSelect($selects, Query::select('$permissions', system: true));
33773377

33783378
//$selects = $this->validateSelections($collection, $selects);
3379-
[$selects, $nestedSelections] = $this->processRelationshipQueries($relationships, $selects);
3379+
3380+
$result = $this->processRelationshipQueries($relationships, $selects);
3381+
$selects = $result['queries'];
3382+
$nestedSelections = $result['nestedSelections'];
33803383

33813384
$validator = new Authorization(self::PERMISSION_READ);
33823385
$documentSecurity = $collection->getAttribute('documentSecurity', false);
@@ -3474,6 +3477,10 @@ public function getDocument(string $collection, string $id, array $queries = [],
34743477
*/
34753478
private function populateDocumentRelationships(Document $collection, Document $document, array $selects = []): Document
34763479
{
3480+
if (empty($document->getId())){
3481+
throw new DatabaseException('$id is a required field');
3482+
}
3483+
34773484
$attributes = $collection->getAttribute('attributes', []);
34783485

34793486
$relationships = [];
@@ -3486,8 +3493,6 @@ private function populateDocumentRelationships(Document $collection, Document $d
34863493
}
34873494
}
34883495

3489-
var_dump($relationships);
3490-
34913496
foreach ($relationships as $relationship) {
34923497
$key = $relationship['key'];
34933498
$value = $document->getAttribute($key);
@@ -3603,7 +3608,12 @@ private function populateDocumentRelationships(Document $collection, Document $d
36033608

36043609
$this->relationshipFetchDepth++;
36053610
$this->relationshipFetchStack[] = $relationship;
3606-
3611+
var_dump($relationships);
3612+
var_dump($side);
3613+
var_dump($document);
3614+
/**
3615+
* How to force $document->getId() , not to be empty?
3616+
*/
36073617
$relatedDocuments = $this->find($relatedCollection->getId(), [
36083618
Query::equal($twoWayKey, [$document->getId()]),
36093619
Query::limit(PHP_INT_MAX),
@@ -6329,7 +6339,10 @@ public function find(string $collection, array $queries = [], string $forPermiss
63296339
$cursor = empty($cursor) ? [] : $this->encode($collection, $cursor)->getArrayCopy();
63306340

63316341
//$selects = $this->validateSelections($collection, $selects);
6332-
[$selects, $nestedSelections] = $this->processRelationshipQueries($relationships, $selects);
6342+
6343+
$result = $this->processRelationshipQueries($relationships, $selects);
6344+
$selects = $result['queries'];
6345+
$nestedSelections = $result['nestedSelections'];
63336346

63346347
$results = $this->adapter->find(
63356348
$context,
@@ -7336,11 +7349,14 @@ private function processRelationshipQueries(
73367349

73377350
$queries = array_values($queries);
73387351

7339-
if ($count > 0 && empty($queries)) {
7340-
//$queries[] = Query::select('*');
7341-
}
7352+
// if ($count > 0 && empty($queries)) {
7353+
// $queries[] = Query::select('*');
7354+
// }
73427355

7343-
return [$queries, $nestedSelections];
7356+
return [
7357+
'queries' => $queries,
7358+
'nestedSelections' => $nestedSelections,
7359+
];
73447360
}
73457361

73467362
/**

tests/e2e/Adapter/Scopes/RelationshipTests.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,23 +1340,21 @@ public function testSelectRelationshipAttributes(): void
13401340
// Select some parent attributes, some child attributes
13411341
$make = $database->findOne('make', [
13421342
Query::select('name'),
1343-
//Query::select('*'),
13441343
Query::select('models.name'),
13451344
]);
1346-
var_dump($make);
1345+
13471346
if ($make->isEmpty()) {
13481347
throw new Exception('Make not found');
13491348
}
13501349

1350+
var_dump($make);
13511351
$this->assertEquals('Ford', $make['name']);
13521352
$this->assertEquals(2, \count($make['models']));
1353-
$this->assertEquals('shmuel', 'fogel');
1354-
13551353
$this->assertEquals('Fiesta', $make['models'][0]['name']);
13561354
$this->assertEquals('Focus', $make['models'][1]['name']);
13571355
$this->assertArrayNotHasKey('year', $make['models'][0]);
13581356
$this->assertArrayNotHasKey('year', $make['models'][1]);
1359-
$this->assertArrayHasKey('$id', $make);
1357+
$this->assertArrayHasKey('$id', $make); // Was added by system in processRelationshipQueries
13601358
$this->assertArrayHasKey('$sequence', $make);
13611359
$this->assertArrayHasKey('$permissions', $make);
13621360
$this->assertArrayHasKey('$collection', $make);

0 commit comments

Comments
 (0)