Добавить атрибут в красноречивую модель - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы рассчитать значение атрибута в его модели, но не могу получить нужные мне данные.

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 Ответ

1 голос
/ 30 сентября 2019

Вы наверняка сможете сделать это в функции доступа. Я думаю, что проблема, с которой вы сталкиваетесь, проще, чем вы думаете.

$shops на ваш взгляд, вероятно, является коллекцией, но $this->shops() возвращает экземпляр Query Builder .. поэтому попробуйте изменить эту строку в функции:

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

С этим:

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

И дайте мне знать, если это работает. Без () shops будет коллекцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...