Я пытаюсь разработать какой-то API с Laravel 5.4 и пытаюсь сохранить, обновить и удалить продажи с соответствующими данными о продажах, но до сих пор не продвинулся вперед после попытки и просмотра множества примеров кода, найденных здесь. Я хочу иметь возможность:
- Сохранение продаж и сведений о продажах (без сопоставления полей по одному)
- Обновите продажу и сведения о ней (без сопоставления полей по одному)
- Удалить продажу и ее детали сразу.
ниже мои коды
Модель продаж
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\SalesDetail;
class Sale extends Model
{
//
protected $fillable=[
'receipt',
'customer',
'total_cost',
'amount_paid',
'payment_type',
'discount_percent',
'discount_amount'
];
// a sale has many sales details
public function saleDetails(){
return $this->hasMany('App\Models\SalesDetail');
}
}
Взаимосвязь модели сведений о продажах
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Sale;
class SalesDetail extends Model
{
//
protected $fillable=[
// 'sales_id',
'category',
'menu',
'unit',
'quantity',
'cost'
];
// A sales detail belongs to a sale
public function sale(){
return $this->belongsTo('App\Models\Sale');
}
}
Контроллер продаж – функция сохранения (обновлено – теперь работает нормально)
public function store(Request $request)
{
//Validate request data
$this->validate($request,['receipt'=>'required']);
//Save sales without sales details data
$sale = Sale::create($request->except(['sale_details']));
//Get sales details data
$saledetails = $request->sale_details;
//Loop through sales details
foreach ($saledetails as $data){
//Create a new instance of sales details model
$details = new SalesDetail;
//fill the model properties (mass assignment) with the data
$details->fill($data);
//Save and link sales details to sales
$sale->saleDetails()->save($details);
}
return 'Sale saved successfully';
}
Контролер продаж — функция обновления
public function update(Request $request, $id)
{
//
$this->validate($request,['receipt'=>'required']);
$sale = Sale::with('saleDetails')->findOrFail($id);
$input=$request->all();
$sale->fill($input)->save();
return 'Sale updated successfully';
}
Контролер продаж — функция удаления
public function destroy($id)
{
//
Sale::with('saleDetails')->whereId($id)->first()->delete();
return 'Sale deleted sucessfully';
}
Пример данных о продажах
{
"id": 1,
"receipt": "RT124558",
"customer": "John Dumelo",
"total_cost": 1000,
"amount_paid": 900,
"payment_type": "Cash",
"discount_percent": 0.1,
"discount_amount": 100,
"created_at": "2017-06-12 00:00:00",
"updated_at": "2017-06-12 00:00:00",
"sale_details": [
{
"id": 1,
"sale_id": 1,
"category": "Pizza",
"menu": "Meat Eater",
"unit": "Large",
"quantity": 10,
"cost": 50,
"created_at": "2017-06-14 00:00:00",
"updated_at": "2017-06-14 00:00:00"
},
{
"id": 2,
"sale_id": 1,
"category": "Pizza",
"menu": "Meat Deluze",
"unit": "Medium",
"quantity": 5,
"cost": 30,
"created_at": "2017-06-14 00:00:00",
"updated_at": "2017-06-14 00:00:00"
}
]
}
Я новичок в Laravel и хотел бы получить помощь в этом. Заранее спасибо.