Laravel Eloquent 模型 Return 人类价值
Laravel Eloquent Model Return Human value
我有一个 User
模型 属性 is_active
。
当我在 foreach 循环中时,我不想使用以下内容:
echo if ( $user->is_active == 0 ) 'not active' : 'active'
实现它的最佳方法是什么?在 User
模型上编写一个 isActive()
方法并将逻辑放在那里?
您可以采用几种方法。
方法一:Acessor!
在您的模型上创建:
public function getFormattedActiveMethod() {
return $this->attributes['active'] ? 'active' : 'not active';
}
然后您可以像这样使用它:$user->formattedActive
(或者任何您想要调用的名称,只要您的方法名称匹配 getCamelCaseNameAttribute())。
您还可以将此属性添加到 $appends
属性 数组中,这样当您将模型投射到 array/json 时它就会显示出来。
方法 2:Presenter 模式
只需创建一个新的 class 即可将数据呈现给您的视图。这是防止模型膨胀并分离逻辑的好方法。
有一些包可以帮助您实现它,例如 robclancy/presenter, laracasts/Presenter, ShawnMcCool/laravel-auto-presenter and even League's Fractal,它们也可以帮助您构建一致的 API。
根据项目的大小,最好采用这种方法。
我有一个 User
模型 属性 is_active
。
当我在 foreach 循环中时,我不想使用以下内容:
echo if ( $user->is_active == 0 ) 'not active' : 'active'
实现它的最佳方法是什么?在 User
模型上编写一个 isActive()
方法并将逻辑放在那里?
您可以采用几种方法。
方法一:Acessor!
在您的模型上创建:
public function getFormattedActiveMethod() {
return $this->attributes['active'] ? 'active' : 'not active';
}
然后您可以像这样使用它:$user->formattedActive
(或者任何您想要调用的名称,只要您的方法名称匹配 getCamelCaseNameAttribute())。
您还可以将此属性添加到 $appends
属性 数组中,这样当您将模型投射到 array/json 时它就会显示出来。
方法 2:Presenter 模式
只需创建一个新的 class 即可将数据呈现给您的视图。这是防止模型膨胀并分离逻辑的好方法。 有一些包可以帮助您实现它,例如 robclancy/presenter, laracasts/Presenter, ShawnMcCool/laravel-auto-presenter and even League's Fractal,它们也可以帮助您构建一致的 API。 根据项目的大小,最好采用这种方法。