#laravel
#laravel
Вопрос:
У меня есть таблица с именем «продукты» с 5 полями (идентификатор, название, цена, количество, общее количество).
Моя цель — рассчитать с помощью формы products.создайте общее количество, цена * количество.
База данных — продукты
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->integer('quantity');
$table->double('price');
$table->double('total')->nullable();
$table->timestamps();
});
}
Модель — продукт
protected $fillable = ['title', 'quantity', 'price', 'total'];
public function setTotalAttribute()
{
$this->total = $this->quantity * $this->price;
}
public function getTotalAttribute($value)
{
return $value;
}
** Контроллер — ProductController**
public function index()
{
$products = Product::oldest()->paginate(5);
return view('admin.products.index', compact('products'))
->with('i', (request()->input('page', 1)-1)*5);
}
public function create()
{
$products = Product::all();
return view('admin.products.create', compact('products'));
}
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'quantity' => 'required',
'price' => 'required',
'total' => 'required'
]);
Product::create($request->all());
return redirect()->route('products.index')
->with('success', 'save');
}
Моя проблема в том, что, на мой взгляд, «products.create» У меня есть 3 поля, когда я кодирую 3 поля, ничего не происходит???
Products.create
<form class="panel-body" action="{{route('products.store')}}" method="POST" novalidate>
@csrf
<fieldset class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
<label for="form-group-input-1">Title</label>
<input type="text" name="title" id="title" class="form-control" value="{{ old('title')}}"/>
{!! $errors->first('title', '<span class="help-block">:message</span>') !!}
</fieldset>
<fieldset class="form-group {{ $errors->has('quantity') ? 'has-error' : '' }}">
<label for="form-group-input-1">Quantity</label>
<input type="text" name="quantity" id="quantity" class="form-control" value="{{ old('quantity')}}"/>
{!! $errors->first('quantity', '<span class="help-block">:message</span>') !!}
</fieldset>
<fieldset class="form-group {{ $errors->has('price') ? 'has-error' : '' }}">
<label for="form-group-input-1">Price</label>
<input type="text" name="price" id="price" class="form-control" value="{{ old('price')}}"/>
{!! $errors->first('price', '<span class="help-block">:message</span>') !!}
</fieldset>
<a href="{{route('products.index')}}" class="btn btn-primary pull-right">Back</a>
<button type="submit" class="btn btn-sm btn-primary">Valider</button>
Спасибо за помощь.
Комментарии:
1. Где вы хотите показать общее количество? Внутри
setTotalAttribute()
вы, вероятно, должны иметь$this->attributes['total'] = $this->quantity * $this->price;
. Определение мутатора .
Ответ №1:
Прежде всего, вы не отправили никакого общего значения…
$request->validate([
'title' => 'required',
'quantity' => 'required',
'price' => 'required',
]);
Просто следуйте Eloquent ORM
$product = New Product();
$product-title = $request->title;
$product-quantity = $request->quantity;
$product-price = $request->price;
$product-total = $request->price * $request* quantity;
$product->save();
//перенаправление()
Ответ №2:
Мутатор получит значение, которое устанавливается для атрибута, поэтому ваш метод мутатора должен быть таким для вашей Product
модели
public function setTotalAttribute()
{
$this->attributes['total'] = $this->quantity * $this->price;
}