feat: Add #[CollectedBy] attribute
#331
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR ports Laravel's
#[CollectedBy]attribute to Hypervel, allowing models to declaratively specify a custom collection class.Summary
#[CollectedBy]attribute for declaring custom collection classes on modelsHasCollectiontrait providing thenewCollection()method with attribute resolutionModelto use the newHasCollectiontraitUsage
Changes
New Files
src/core/src/Database/Eloquent/Attributes/CollectedBy.php- The attribute classsrc/core/src/Database/Eloquent/Concerns/HasCollection.php- Trait providingnewCollection()with attribute resolutiontests/Core/Database/Eloquent/Concerns/HasCollectionTest.php- Tests (9 tests, 16 assertions)Modified Files
src/core/src/Database/Eloquent/Model.php- AddedHasCollectiontrait, removed inlinenewCollection()methodHow It Works
newCollection()is called on a model, theHasCollectiontrait checks for a#[CollectedBy]attributeHypervel\Database\Eloquent\CollectionNotes
#[CollectedBy]attribute if they want a custom collection