File tree Expand file tree Collapse file tree 6 files changed +72
-2
lines changed
Expand file tree Collapse file tree 6 files changed +72
-2
lines changed Original file line number Diff line number Diff line change 99use Tempest \Database \Config \DatabaseConfig ;
1010use Tempest \Database \Exceptions \MissingRelation ;
1111use Tempest \Database \Exceptions \MissingValue ;
12+ use Tempest \Database \TableName as TableNameAttribute ;
1213use Tempest \Reflection \ClassReflector ;
1314use Tempest \Reflection \PropertyReflector ;
1415
@@ -57,10 +58,14 @@ public function getId(): Id
5758
5859 public static function table (): TableName
5960 {
60- $ name = get (DatabaseConfig::class)
61+ $ specificName = new ClassReflector (static ::class)
62+ ->getAttribute (TableNameAttribute::class)
63+ ?->name;
64+
65+ $ conventionalName = get (DatabaseConfig::class)
6166 ->namingStrategy ->getName (self ::class);
6267
63- return new TableName ($ name );
68+ return new TableName ($ specificName ?? $ conventionalName );
6469 }
6570
6671 public static function new (mixed ...$ params ): self
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Database ;
4+
5+ use Attribute ;
6+
7+ #[Attribute(Attribute::TARGET_CLASS )]
8+ final class TableName
9+ {
10+ public function __construct (
11+ public string $ name ,
12+ ) {
13+ }
14+ }
Original file line number Diff line number Diff line change 4242use Tests \Tempest \Integration \ORM \Migrations \CreateHasManyChildTable ;
4343use Tests \Tempest \Integration \ORM \Migrations \CreateHasManyParentTable ;
4444use Tests \Tempest \Integration \ORM \Migrations \CreateHasManyThroughTable ;
45+ use Tests \Tempest \Integration \ORM \Models \AttributeTableNameModel ;
46+ use Tests \Tempest \Integration \ORM \Models \BaseModel ;
47+ use Tests \Tempest \Integration \ORM \Models \StaticMethodTableNameModel ;
4548
4649/**
4750 * @internal
@@ -529,4 +532,11 @@ public function test_find(): void
529532
530533 $ this ->assertCount (0 , $ invalid );
531534 }
535+
536+ public function test_table_name_overrides (): void
537+ {
538+ $ this ->assertEquals ('base_models ' , BaseModel::table ()->tableName );
539+ $ this ->assertEquals ('custom_attribute_table_name ' , AttributeTableNameModel::table ()->tableName );
540+ $ this ->assertEquals ('custom_static_method_table_name ' , StaticMethodTableNameModel::table ()->tableName );
541+ }
532542}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tests \Tempest \Integration \ORM \Models ;
4+
5+ use Tempest \Database \DatabaseModel ;
6+ use Tempest \Database \IsDatabaseModel ;
7+ use Tempest \Database \TableName ;
8+
9+ #[TableName('custom_attribute_table_name ' )]
10+ final class AttributeTableNameModel implements DatabaseModel
11+ {
12+ use IsDatabaseModel;
13+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tests \Tempest \Integration \ORM \Models ;
4+
5+ use Tempest \Database \DatabaseModel ;
6+ use Tempest \Database \IsDatabaseModel ;
7+
8+ final class BaseModel implements DatabaseModel
9+ {
10+ use IsDatabaseModel;
11+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tests \Tempest \Integration \ORM \Models ;
4+
5+ use Tempest \Database \Builder \TableName ;
6+ use Tempest \Database \DatabaseModel ;
7+ use Tempest \Database \IsDatabaseModel ;
8+
9+ final class StaticMethodTableNameModel implements DatabaseModel
10+ {
11+ use IsDatabaseModel;
12+
13+ public static function table (): TableName
14+ {
15+ return new TableName ('custom_static_method_table_name ' );
16+ }
17+ }
You can’t perform that action at this time.
0 commit comments