Skip to content

Commit f4c66dd

Browse files
committed
make Join::${weak, reverse} props public
1 parent a264620 commit f4c66dd

File tree

4 files changed

+13
-14
lines changed

4 files changed

+13
-14
lines changed

src/Model/Join.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ abstract class Join
4444
protected $kind;
4545

4646
/** Weak join does not update foreign table. */
47-
protected bool $weak = false;
47+
public bool $weak = false;
4848

4949
/**
5050
* Normally the foreign table is saved first, then it's ID is used in the
@@ -59,7 +59,7 @@ abstract class Join
5959
* of saving and delete needs to be reversed. In this case $reverse
6060
* will be set to `true`. You can specify value of this property.
6161
*/
62-
protected bool $reverse = false;
62+
public bool $reverse = false;
6363

6464
/**
6565
* Field to be used for matching inside master table.

src/Schema/Migrator.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,7 @@ protected function resolveRelationDirection(object $relation): array
372372
} elseif ($relation instanceof Join) {
373373
$localField = $relation->getMasterField();
374374
$foreignField = $relation->getForeignModel()->getField($relation->foreignField);
375-
376-
if ($localField->shortName === 'id') { // TODO quick hack, detect direction based on kind/reverse here
375+
if ($relation->reverse) {
377376
[$localField, $foreignField] = [$foreignField, $localField];
378377
}
379378
} else {

tests/JoinArrayTest.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,23 @@ public function testDirection(): void
3636
$m = new Model($db, ['table' => 'user']);
3737

3838
$j = $m->join('contact');
39-
self::assertFalse($this->getProtected($j, 'reverse'));
39+
self::assertFalse($j->reverse);
4040
self::assertSame('contact_id', $this->getProtected($j, 'masterField'));
4141
self::assertSame('id', $this->getProtected($j, 'foreignField'));
4242

4343
$j = $m->join('contact2.test_id');
44-
self::assertTrue($this->getProtected($j, 'reverse'));
44+
self::assertTrue($j->reverse);
4545
self::assertSame('id', $this->getProtected($j, 'masterField'));
4646
self::assertSame('test_id', $this->getProtected($j, 'foreignField'));
4747

4848
$j = $m->join('contact3', ['masterField' => 'test_id']);
49-
self::assertFalse($this->getProtected($j, 'reverse'));
49+
self::assertFalse($j->reverse);
5050
self::assertSame('test_id', $this->getProtected($j, 'masterField'));
5151
self::assertSame('id', $this->getProtected($j, 'foreignField'));
5252

5353
$this->expectException(Exception::class); // TODO not implemented yet, see https://github.com/atk4/data/issues/803
5454
$j = $m->join('contact4.foo_id', ['masterField' => 'test_id', 'reverse' => true]);
55-
// self::assertTrue($this->getProtected($j, 'reverse'));
55+
// self::assertTrue($j->reverse);
5656
// self::assertSame('test_id', $this->getProtected($j, 'masterField'));
5757
// self::assertSame('foo_id', $this->getProtected($j, 'foreignField'));
5858
}
@@ -414,12 +414,12 @@ public function testForeignFieldNameGuessTableWithSchema(): void
414414

415415
$m = new Model($db, ['table' => 'db.user']);
416416
$j = $m->join('contact');
417-
self::assertFalse($this->getProtected($j, 'reverse'));
417+
self::assertFalse($j->reverse);
418418
self::assertSame('contact_id', $this->getProtected($j, 'masterField'));
419419
self::assertSame('id', $this->getProtected($j, 'foreignField'));
420420

421421
$j = $m->join('contact2', ['reverse' => true]);
422-
self::assertTrue($this->getProtected($j, 'reverse'));
422+
self::assertTrue($j->reverse);
423423
self::assertSame('id', $this->getProtected($j, 'masterField'));
424424
self::assertSame('user_id', $this->getProtected($j, 'foreignField'));
425425
}

tests/JoinSqlTest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,17 @@ public function testDirection(): void
5151
$m = new Model($this->db, ['table' => 'user']);
5252

5353
$j1 = $m->join('contact');
54-
self::assertFalse($this->getProtected($j1, 'reverse'));
54+
self::assertFalse($j1->reverse);
5555
self::assertSame('contact_id', $this->getProtected($j1, 'masterField'));
5656
self::assertSame('id', $this->getProtected($j1, 'foreignField'));
5757

5858
$j2 = $m->join('contact2.test_id');
59-
self::assertTrue($this->getProtected($j2, 'reverse'));
59+
self::assertTrue($j2->reverse);
6060
self::assertSame('id', $this->getProtected($j2, 'masterField'));
6161
self::assertSame('test_id', $this->getProtected($j2, 'foreignField'));
6262

6363
$j3 = $m->join('contact3', ['masterField' => 'test_id']);
64-
self::assertFalse($this->getProtected($j3, 'reverse'));
64+
self::assertFalse($j3->reverse);
6565
self::assertSame('test_id', $this->getProtected($j3, 'masterField'));
6666
self::assertSame('id', $this->getProtected($j3, 'foreignField'));
6767

@@ -78,7 +78,7 @@ public function testDirection(): void
7878
$this->expectException(Exception::class);
7979
$this->expectExceptionMessage('Joining tables on non-id fields is not implemented yet'); // https://github.com/atk4/data/issues/803
8080
$j4 = $m->join('contact4.foo_id', ['masterField' => 'test_id', 'reverse' => true]);
81-
// self::assertTrue($this->getProtected($j4, 'reverse'));
81+
// self::assertTrue($j4->reverse);
8282
// self::assertSame('test_id', $this->getProtected($j4, 'masterField'));
8383
// self::assertSame('foo_id', $this->getProtected($j4, 'foreignField'));
8484
}

0 commit comments

Comments
 (0)