Skip to content

Commit 2a11aec

Browse files
laylatichygitbutler-client
authored andcommitted
test: add duplicate belongs to many relation test
1 parent 3d5833e commit 2a11aec

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

tests/Integration/Database/Builder/SelectQueryBuilderTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
use Tests\Tempest\Fixtures\Migrations\CreateChapterTable;
1313
use Tests\Tempest\Fixtures\Migrations\CreateIsbnTable;
1414
use Tests\Tempest\Fixtures\Migrations\CreatePublishersTable;
15+
use Tempest\Database\BelongsToMany;
16+
use Tempest\Database\IsDatabaseModel;
17+
use Tempest\Database\Table;
1518
use Tests\Tempest\Fixtures\Models\AWithEager;
1619
use Tests\Tempest\Fixtures\Modules\Books\Models\Author;
1720
use Tests\Tempest\Fixtures\Modules\Books\Models\AuthorType;
@@ -735,4 +738,51 @@ public function test_select_with_has_one_through_relation(): void
735738
$query->compile(),
736739
);
737740
}
741+
742+
public function test_select_with_duplicate_belongs_to_many_target_table(): void
743+
{
744+
$query = query(model: UserWithRoleAndDirectPermissions::class)
745+
->select()
746+
->with('role', 'role.permissions', 'permissions')
747+
->build();
748+
749+
$this->assertSameWithoutBackticks(
750+
'SELECT users.id AS `users.id`, users.name AS `users.name`, users.role_id AS `users.role_id`, roles.id AS `role.id`, roles.name AS `role.name`, role_permissions.id AS `role.permissions.id`, role_permissions.label AS `role.permissions.label`, permissions.id AS `permissions.id`, permissions.label AS `permissions.label` FROM `users` LEFT JOIN roles ON roles.id = users.role_id LEFT JOIN permissions_roles ON permissions_roles.role_id = roles.id LEFT JOIN permissions AS role_permissions ON role_permissions.id = permissions_roles.permission_id LEFT JOIN permissions_users ON permissions_users.user_id = users.id LEFT JOIN permissions ON permissions.id = permissions_users.permission_id',
751+
$query->compile(),
752+
);
753+
}
754+
}
755+
756+
#[Table(name: 'users')]
757+
final class UserWithRoleAndDirectPermissions
758+
{
759+
use IsDatabaseModel;
760+
761+
public string $name;
762+
763+
public ?RoleWithPermissions $role = null;
764+
765+
/** @var \Tests\Tempest\Integration\Database\Builder\Permission[] */
766+
#[BelongsToMany(pivot: 'permissions_users')]
767+
public array $permissions = [];
768+
}
769+
770+
#[Table(name: 'roles')]
771+
final class RoleWithPermissions
772+
{
773+
use IsDatabaseModel;
774+
775+
public string $name;
776+
777+
/** @var \Tests\Tempest\Integration\Database\Builder\Permission[] */
778+
#[BelongsToMany(pivot: 'permissions_roles')]
779+
public array $permissions = [];
780+
}
781+
782+
#[Table(name: 'permissions')]
783+
final class Permission
784+
{
785+
use IsDatabaseModel;
786+
787+
public string $label;
738788
}

0 commit comments

Comments
 (0)