在数据透视表laravel/vue上保存额外字段



我有一个发票表、一个项目表和一个数据透视表invoice_items。Inovice_items表有一个字段数量,用于保存特定发票上每个项目的保存数量。

在Invoice中添加项目是用Vue.js创建的。如何在透视表中保存Vue中的数量?

代码项目模式

<template>
<div>
<div class="modal fade" id="itemsModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Select an Item</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" data-backdrop="false" data-toggle="modal" data-target="#itemsModal"  aria-label="Close"></button>
</div>
<div class="modal-body" >
<select class="form-select  mb-3"  v-if="items" @change="getSelectedItem($event)">
<option selected>-Select an Item-</option>
<option v-for="item in items " 
:key="item.id"
:value="item.id"
>{{ item.name }}</option>
</select>
<div class="m-4">
<label for="">Sales Price</label><br>
<p class="price">{{ selectedItem.sales_price }} $</p>
</div>
<div class="m-4">
<label for="">Quantity</label><br>
<input type="number" class="form-control" v-model="selectedItem.quantity" name="quantity">
</div>
<div class="m-4">
<label for="">Total</label><br>
<p class="price">{{ totalPrice }} $</p>
</div>
<span class="btn btn-success" @click="addInvoiceItem">Add</span>
</div>

</div>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: 'ItemsModal',
mounted(){
this.getItems()
},
data(){
return{
items: [],
selectedItem: { 
},
}
},
methods:{
getItems(){
axios.get('http://127.0.0.1:8000/data/all-items').then(response => {
this.items = response.data
})
},
getSelectedItem(event){
axios.get('http://127.0.0.1:8000/items/' + event.target.value).then(response => {
this.selectedItem = response.data.item
})
},
addInvoiceItem(){
this.$emit('selected-item',  this.selectedItem )
this.selectedItem = {}
$('#itemsModal').toggle()
$('.modal-backdrop').hide()
}
},
computed:{
totalPrice(){
let total = 0;
total += (this.selectedItem.sales_price * this.selectedItem.quantity)
this.selectedItem.total = total
return total
}
}
}
</script>

发票控制器

public function store(Request $request)
{
$invoice = Invoice::create([
'invoice_no' => 'invoice',
'invoice_date'=> $request->input('invoice_date'),
'due_date'=> $request->input('due_date'),
'customer_id'=> $request->input('customer_id'),
'sub_total' => $request->input('sub_total'),
'discount' => $request->input('discount'),
'total' => $request->input('total')
]);
return redirect('/invoices');
}

Invoice.php


protected $fillable = ['invoice_no', 'invoice_date', 'due_date','sub_total','discount','total','customer_id'];
public function item(){
return $this->belongsToMany(Item::class,'invoices_items')->withPivot('quantity');;
}

项目.php


protected $fillable= ['name','sales_price','purchase_price', 'category_id'];

public function invoices(){
return $this->belongsToMany(Invoice::class, 'invoices_items')->withPivot('quantity');;
}

我希望问题是清楚的。谢谢

保存发票后,在发票控制器中,您应该使用多对多关系来attach()发票中的项目就是这样做的。

public function store(Request $request)
{     $invoice = Invoice::create([
'invoice_no' => 'invoice',
'invoice_date'=> $request->input('invoice_date'),
'due_date'=> $request->input('due_date'),
'customer_id'=> $request->input('customer_id'),
'sub_total' => $request->input('sub_total'),
'discount' => $request->input('discount'),
'total' => $request->input('total')
]); 
$item = Item::findOrFail($request->get('item_id'));

$item->invoices()->attach($invoice->primary_key, ['quantity' =>$request->get('quantity')]);
return redirect('/invoices');
}

最新更新