Я определил атрибут в своей модели и хочу использовать его в области.
protected $appends = ['lowest_price'];
public function getLowestPriceAttribute()
{
$lowest_price = NULL;
foreach($this->shops as $shop) {
if(is_null($lowest_price)) {
$lowest_price = (double)$shop->pivot->price;
}
if($lowest_price > (double)$shop->pivot->price) {
$lowest_price = (double)$shop->pivot->price;
}
}
return $lowest_price;
}
Атрибут lower_price, который я хотел бы использовать в области, но он всегда равен нулю:
public function scopeMaxPrice(Builder $query, $max_price): Builder {
return $query->where('max_price', '>=', $this->lowest_price);
}
Если я дд ();Функция getLowestPriceAttribute в области видимости также возвращает 'null'. На мой взгляд, у меня есть доступ к атрибуту lower_price.
Может ли атрибут быть частью запроса? Если нет, есть ли элегантное решение?
РЕДАКТИРОВАТЬ: область вызывается в контроллере продукта:
public function index()
{
$products = QueryBuilder::for(Product::class)
->allowedFilters(
AllowedFilter::exact('type_id')->default('1'),
AllowedFilter::scope('min_speed')->default(0),
AllowedFilter::scope('min_range')-> default(0)
# AllowedFilter::scope('max_price')-> default(999)
)
->get();
$types = DB::table('types')->pluck('name', 'id');
return view('pages.home', compact('products', 'types'));
}
Примечание: я использую построитель запросов Spatie