laravel-mongodb
laravel-mongodb copied to clipboard
Attribute accessors not working when accessor method is one word
- Laravel-mongodb Version: 3.9.0
- PHP Version: 8.1.3
- Database Driver & Version: irrelevant (not a database issue)
Description:
Attribute accessors not working when accessor method is one word when using laravel 9 Attributes convention: https://laravel.com/docs/9.x/eloquent-mutators#defining-an-accessor
From the docs: This method name should correspond to the "camel case" representation of the true underlying model attribute / database column when applicable.
e.g
-
first_name
attribute should have afirstName
method that returns\Illuminate\Database\Eloquent\Casts\Attribute
which is then accessible by$model->first_name
-
name
attribute should have aname
method that returns\Illuminate\Database\Eloquent\Casts\Attribute
which is then accessible by$model->name
When extending laravel-mongodb Model class, If model has an attribute accessor method which is one word. i.e the name
example from above, its being treated like a relationship.
I've done some logging and believe this line is the issue: https://github.com/jenssegers/laravel-mongodb/blob/master/src/Eloquent/Model.php#L158
Potential fix is don't call getRelationValue()
if the return type of the method is \Illuminate\Database\Eloquent\Casts\Attribute
like what happens in base laravel model? https://github.com/laravel/framework/blob/9.x/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php#L572
Any progress here? I've came across the same issue. Been investigating this for hours as the cause of the problem was not obvious at all.
Made a simple fix with help of @CraigMonva's hint. Let's hope it'll be reviewed soon.