繁体   English   中英

将属性添加到 eloquent model

[英]Add attribute to eloquent model

我想计算 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

如果这是不可能的,最好的选择是在视图本身而不是 model 中进行计算?

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

您认为$shops可能是一个集合,但$this->shops()返回一个 Query Builder 实例。所以尝试在 function 中更改此行:

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

有了这个:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM