我想计算模型中某个属性的值,但无法获取所需的数据。
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
如果不可能的话,最好的替代方法是在视图本身而不是模型中进行计算吗?
答案 0 :(得分:1)
您应该肯定可以在访问器函数中执行此操作。我认为您遇到的问题比您想象的要简单。
您视图中的 $shops
可能是一个集合,但是$this->shops()
返回了一个查询生成器实例。.因此,请尝试在函数中更改此行:
foreach($this->shops() as $shop) {
与此:
foreach($this->shops as $shop) {
让我知道它是否有效。如果没有()
,则shops
将是一个集合。