向雄辩模型添加属性

时间:2019-09-30 13:14:37

标签: php laravel eloquent model

我想计算模型中某个属性的值,但无法获取所需的数据。

class Product extends Model
{

    protected $appends = ['lowest_price'];

    public function shops(){
        return $this->belongsToMany('App\Shop')->withPivot('price','url');
    }

    public function type(){
        return $this->belongsTo('App\Type');
    }

    public function getLowestPriceAttribute()                      <-----------------------------
    {
        $lowest_price = 0;
        foreach($this->shops() as $shop) {
            if($lowest_price > $shop->pivot->price) {
                $lowest_price = $shop->pivot->price;
            }
        }
        return $lowest_price;
    }
}

$this->shops()似乎并没有加载我需要进行计算的所有数据。

我认为我可以像这样遍历产品商店:

@foreach($shops as $shop)   
    <tr>
        <a href="{{ $shop->pivot->url }}" target="_blank">      
            <td>{{ $shop->name }}</td>
            <td>{{ $shop->pivot->price }}EUR</td>
        </a>        
    </tr>
@endforeach

如果不可能的话,最好的替代方法是在视图本身而不是模型中进行计算吗?

1 个答案:

答案 0 :(得分:1)

您应该肯定可以在访问器函数中执行此操作。我认为您遇到的问题比您想象的要简单。

您视图中的

$shops可能是一个集合,但是$this->shops()返回了一个查询生成器实例。.因此,请尝试在函数中更改此行:

foreach($this->shops() as $shop) {

与此:

foreach($this->shops as $shop) {

让我知道它是否有效。如果没有(),则shops将是一个集合。