Я уже создал сайт на laravel, но есть требование, чтобы цена товара изменялась в зависимости от типа пользователя.
так вот как это должно быть =>
if ($user->type = 'special')
Мне нужно получить $item->special_price, а не $item->price из базы данных.
Я показываю $item->price во многих местах.
Мой вопрос: в зависимости от логина пользователя, могу ли я перезаписать все места, в которых я использую $item->price, на $item->special_price?
да, это связано с БД
вы можете создать метод specialPrice и вернуть его как $ this-> price * something
слишком много мест меняется, я пытаюсь сделать это внутри модели, перезаписать ценовые вызовы с помощью special_price ... что-то в этом роде






Laravel позволяет создавать настраиваемые атрибуты для ваших моделей.
class Item extends Model {
public function getCurrentPriceAttribute(){
return auth()->user()->type == 'special'
? $this->special_price
: $this->price
}
}
Здесь мы используем помощник auth(), чтобы получить текущего пользователя. Мы проверяем тип пользователя и, если он особенный, получаем special_price, если пользователь не особенный, возвращаем «нормальный» price.
Вы можете использовать $item->currentPrice, чтобы узнать цену для текущего пользователя.
Хорошо, я могу попробовать это. Я думал использовать что-то вроде этого, но есть много мест, которые мне нужно изменить, чтобы использовать это, потому что в настоящее время я просто использую $ this-> price во всех местах. Я пытался найти способ ввести $ this-> special_price в $ this-> price в модели, чтобы мне не пришлось менять код во многих местах.
$key = auth()->user()->type=='normal'||(other user types where u need $item->price)?'price':auth()->user()->type.'_price';
$price = $item[$key];
Пожалуйста, предоставьте контекст, а не только правильный код. Что не так с кодом, предоставленным автором вопроса? В чем ваше улучшение?
цена взята из базы данных?