classModelMetadata
final class ModelMetadata
Reads source-declared model metadata without loading model or framework code.
Constants§
public const MODEL = 'Illuminate\Database\Eloquent\Model'The framework contract identified by model.
public const BUILDER = 'Illuminate\Database\Eloquent\Builder'The framework contract identified by builder.
public const SOFT_DELETES = 'Illuminate\Database\Eloquent\SoftDeletes'The framework contract identified by soft_deletes.
Methods§
public function __construct(private ProgramIndex $index)Configures the source metadata and SQL grammar used by this model.
Parameters
$index | ProgramIndex |
public function state(string $className, ?string $dialect): QueryStateThe model's explicit defaults and known framework effects.
Parameters
$className | string | |
$dialect | ?string |
Returns
Test cases 4
ModelMetadataTest::testGuardExplainsTheSpecificUnmodelledModelEffectcallsModelMetadataTest::testStateKeepsStandardEmptyDefaultsAndFactoryTraitsClosedcallsModelMetadataTest::testStateReadsInheritedTableKeyAndSoftDeletescallsModelMetadataTest::testStateRejectsCustomizingAttributesAndUnknownTableConventionscalls
Called from 1
Calls 10
- method-call ModelMetadata::property() line 47
- method-call ModelMetadata::conventionalTable() line 48
- new QueryState line 50
- function-call
is_stringline 51 - static-call Domain::literal() line 51
- static-call Domain::unknown() line 51
- method-call ProgramIndex::isInstanceOf() line 59
- class-const ModelMetadata::SOFT_DELETES() line 59
- method-call ModelMetadata::constant() line 60
- method-call ModelMetadata::guard() line 64
public function guard(string $className, QueryState $state): QueryStateModel hooks and custom builders cannot be silently treated as standard behavior.
Parameters
$className | string | |
$state | QueryState |
Returns
Test cases 1
Called from 1
Calls 5
- method-call ProgramIndex::lineage() line 72
- method-call ModelMetadata::guardDefaults() line 76
- function-call
str_starts_withline 77 - function-call
in_arrayline 81 - class-const ModelMetadata::SOFT_DELETES() line 81
public function guardDefaults(ClassShape $shape, QueryState $state): QueryStateRejects unresolved defaults and implicit additional queries.
Parameters
$shape | ClassShape | |
$state | QueryState |
Returns
Called from 1
public function recognizes(?string $className): boolFramework model ancestors identifiable even when vendor files are excluded.
Parameters
$className | ?string |
Returns
boolTest cases 1
Called from 3
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:74
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:86
- method-call SqlCatalog\Extension\Laravel\CallModel::matchesClass() packages/sql-catalog/src/Extension/Laravel/CallModel.php:64
Calls 2
- class-const ModelMetadata::MODEL() line 133
- method-call ProgramIndex::isInstanceOf() line 134
public function property(string $className, string $property): string|int|float|bool|nullA scalar property default, searching the model before its ancestors.
Parameters
$className | string | |
$property | string |
Returns
string|int|float|bool|nullTest cases 1
Called from 5
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:47
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:49
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:55
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:56
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:57
Calls 2
- method-call ProgramIndex::lineage() line 147
- method-call ModelMetadata::scalar() line 149
public function constant(string $className, string $constant): string|int|float|bool|nullA scalar model constant, such as DELETED_AT.
Parameters
$className | string | |
$constant | string |
Returns
string|int|float|bool|nullTest cases 1
Called from 1
Calls 2
- method-call ProgramIndex::findClassConstant() line 161
- method-call ModelMetadata::scalar() line 163
public function scalar(Expr $expression): string|int|float|bool|nullA literal default; arbitrary expressions are left unresolved.
Parameters
$expression | Expr |
Returns
string|int|float|bool|nullTest cases 1
Called from 3
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::guardDefaults() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:121
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::property() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:149
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::constant() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:163
public function conventionalTable(string $className): ?stringCommon unambiguous English conventions; other inflections require an explicit table.
Parameters
$className | string |
Returns
?stringTest cases 1
Called from 1
Private surface 1§
Implementation details, listed for orientation only.
private ProgramIndex $indexTest cases 16§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 11
ModelMetadataTest::testConstantReadsOnlyLiteralDefaultscallsModelMetadataTest::testConventionalTableUsesKnownEnglishNamesAndRequiresExplicitOtherInflectionscallsModelMetadataTest::testGuardDefaultsRejectsUnknownMetadataAndImplicitEagerLoadscallsModelMetadataTest::testGuardExplainsTheSpecificUnmodelledModelEffectcallsModelMetadataTest::testGuardLeavesHooksTraitsAndMutableMetadataOpencallsModelMetadataTest::testPropertyPrefersTheNearestDeclarationcallsModelMetadataTest::testRecognizesFrameworkAuthenticationModelsWithoutLoadingVendorCodecallsModelMetadataTest::testScalarDoesNotEvaluateApplicationCallscallsModelMetadataTest::testStateKeepsStandardEmptyDefaultsAndFactoryTraitsClosedcallsModelMetadataTest::testStateReadsInheritedTableKeyAndSoftDeletescallsModelMetadataTest::testStateRejectsCustomizingAttributesAndUnknownTableConventionscalls
Other tests reaching this symbol 5
BuilderCallsTest::testExecutionFindRetainsItsPredicateAndTheModelReturnTypecallsBuilderCallsTest::testIsBuilderRecognizesSourceDeclaredModelsAndBothBuilderContractscallsBuilderCallsTest::testMutateOnlyChangesSoftDeleteModesForModelsUsingTheTraitcallsBuilderCallsTest::testStaticCallCreatesFacadeQueriesAndDoesNotModelUnrelatedStaticscallsAnalyzerTestcalls
Relations§
Instantiated in 4
- new SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:74
- new SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:86
- new SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:89
- new SqlCatalog\Extension\Laravel\CallModel::matchesClass() packages/sql-catalog/src/Extension/Laravel/CallModel.php:64
Method calls 4
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:74
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:86
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:89
- method-call SqlCatalog\Extension\Laravel\CallModel::matchesClass() packages/sql-catalog/src/Extension/Laravel/CallModel.php:64
Constant reads 5
- class-const SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:73
- class-const SqlCatalog\Extension\Laravel\BuilderCalls::staticCall() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:89
- class-const SqlCatalog\Extension\Laravel\CallModel::evaluate() packages/sql-catalog/src/Extension/Laravel/CallModel.php:39
- class-const SqlCatalog\Extension\Laravel\CallModel::matchesClass() packages/sql-catalog/src/Extension/Laravel/CallModel.php:64
- class-const SqlCatalog\Extension\Laravel\CallbackModel::apply() packages/sql-catalog/src/Extension/Laravel/CallbackModel.php:57