模型对象的最小最大数据库值,其中结束值已知

时间:2015-10-24 16:39:51

标签: laravel eloquent tostring blade

我想我可能完全落后了,所以如果有一个明显的方法,我将不胜感激。

使用Eloquent模型,我有一个相关模型属性的值。在许多情况下,如果输出在该属性的数据库中的最小/最大值为低,中或高,则我想将输出着色。

E.g。模型值为9.数据库最大值为10,min为1.因此,我会根据其百分比将此颜色设置为红色。

模型是$ prog。相关模型是drLevel。价值是RTO。所以 - 我的链看起来像这样:$ prog-> drLevel-> RTO。

在刀片中,我可以轻松显示值(9)。我想做的是使用最简单/最薄的代码着色它。

这很有效

{!! format( $prog->drLevel->RTO, $prog->drLevel->min('RTO'), $prog->drLevel->max('rto') ) !!}

,方法大致如下:

function format($value, $min, $max){
     switch by $value vs $min/$max, color appropriately
     return the value with color
   }

虽然很好,但我这样做了100次。我试图找到一种简洁的方法来减少代码,只将对象本身发送到方法:

{!! format( $prog->drLevel->RTO) !!}

然后在该方法上,分开选择对象,并为每个传递的对象重用该片段,如:

function format($value){
  $model = findTheObjectBase($value)   // Should return $prog->drLevel
  $property = findTheLastChainedElementStringValue($value)  // Should return 'RTO'
  $min = $model->min($property)
   etc.
}

不知道怎么做......

我猜我依赖于从对象名称到字符串的更改以使其适合 - > min()函数是一个坏主意...但我正在努力使其干净/减少代码而无需向模型中的每个属性添加方法。

傻瓜的差事?或者我只是错过了一种更简单的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用drLevel模型编写方法

public function formattedRTO() {
    $value = $this->RTO;
    $max = App\drLevel::all()->max('RTO');
    $min = App\drLevel:all()->min('RTO');
    // now you have min, max and current value, form here return whatever you want, using switch maybe
    return formated_result;
}

现在你可以简单地使用它,

{{ $prog->drLevel->formattedRTO(); }}

希望有所帮助。