如果我想要一个Eloquent Model类有setter和getter来实现一个接口,下面的方法有意义吗?还是有一个'laravel'的方法来解决这个问题?
class MyClass extends Model implements someContract
{
public function setFoo($value) {
parent::__set('foo', $value);
return $this;
}
public function getFoo() {
return parent::__get('foo');
}
}
您可能正在寻找访问器(getter)和mutator (setter)。
Laravel中访问器(getter)的例子:
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
Laravel中mutator (setter)的例子:
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
对于新的laravel,你可以在model:
/**
* Interact with the user's first name.
*
* @param string $value
* @return 'Illuminate'Database'Eloquent'Casts'Attribute
*/
protected function firstName(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value),
set: fn ($value) => strtolower($value),
);
}
想知道更多吗?参见:(相同的实现)
- https://laravel.com/docs/9.x/eloquent-mutators defining-a-mutator
- https://laravel.com/docs/10.x/eloquent-mutators defining-a-mutator