【发布时间】: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