【问题标题】:Min Max DB Value from Model object where end value is known来自模型对象的最小最大 DB 值,其中最终值已知
【发布时间】:2016-01-24 01:40:31
【问题描述】:

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

使用 Eloquent 模型,我有一个相关模型属性的值。在许多情况下,我希望根据 数据库 中该属性的最小值/最大值对输出的低、中或高进行着色。

例如模型值为 9。数据库最大值为 10,最小值为 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) !!}

然后在方法上,将对象分开并为传入的每个对象重用 sn-p,例如:

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

不知道怎么做以上...

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

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

【问题讨论】:

  • 您可以在 drLevel 模型中编写方法,甚至可以使用 Accessors 重载 RTO 属性

标签: laravel eloquent tostring blade


【解决方案1】:

您可以使用 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(); }}

希望对您有所帮助。

【讨论】:

  • 谢谢@akshendra Pratap。我同意,如果我只有一个财产,这将很有用。我有几十个 - 所以这无助于我将单个模型传递给通用的“格式”类。我仍然需要为每个属性编写一个特定的格式函数。如上所示,我希望能够拆开模型链并在链上进行操作。我认为这可能是不可能的,我只是每次都将每个不同属性的特定值传递给函数
  • 你可以通过传递属性字符串来使这个通用化,然后使用 $this->getAttribute('atrribute-string') 获取当前值,也可以轻松提取最小值和最大值。通过这种方式,至少一个模型的格式函数是可能的。
  • 是的,但我又回到了最初的问题——如何从链中提取属性 string? IE 如果我有 $prog->drLevel->xxx 的 50 个属性,如何在不通过在方法调用中传递字符串明确说明的情况下提取每个属性的 xxx?
  • 是的,我所说的方式将有一个类似 $prog->drLevel->formattedAttr('xxx') 的调用,而不是 $prog->drLevel->xxx。不知道是否可以提取属性名称。你可能会在 Laravel 源代码中找到一些帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
相关资源
最近更新 更多