我正在尝试使用Laravel 5.4开发某种类型的API,并一直尝试使用其相关的销售详细信息来保存,更新和删除销售,但在尝试并查找了大量代码示例后仍然没有任何进展这里。 我希望能够:
下面是我的代码
销售模式关系
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的新手,希望我能得到帮助。 先感谢您。
答案 0 :(得分:1)
尝试单独保存Sale和SaleDetail模型,然后按以下方式关联它们:
$sale->saleDetails()->associate($details);
根据您的SaleDetails模型,您需要对此进行过滤:
"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"
}
]
仅限于此:
"sale_details": [
{
"category": "Pizza",
"menu": "Meat Eater",
"unit": "Large",
"quantity": 10,
"cost": 50
},
{
"category": "Pizza",
"menu": "Meat Deluze",
"unit": "Medium",
"quantity": 5,
"cost": 30
}
]
答案 1 :(得分:1)
销售控制器 - 保存功能(更新 - 现在正常工作)
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::findOrFail($id);
$saleinput = $request->except(['sale_details']);
$sale->fill($saleinput)->save();
$saledetails = $request->sale_details;
//Delete previous sales details
SalesDetail::where('sale_id', $id)->delete();
foreach ($saledetails as $data){
$details = new SalesDetail;
$details->fill($data);
$sale->saleDetails()->save($details);
}
return 'Sale updated successfully';
}
销售控制器 - 删除功能(已更新 - 现在正常工作)
public function destroy($id)
{
//Delete sales details before deleting sales
SalesDetail::where('sale_id', $id)->delete();
Sale::whereId($id)->first()->delete();
return 'Sale deleted sucessfully';
}