[英]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.