【问题标题】:Saving Multiple Records In DB - One To Many Relationship在数据库中保存多条记录 - 一对多关系
【发布时间】:2018-12-01 15:08:33
【问题描述】:

我正在使用Laravel 5.7 & VueJs 2.5.* ...

我想将我的TicketInvoiceTicketInvoiceItems 数据保存在数据库中,当我提交发票表单时,TicketInvoice 数据存储在DBTicketInvoiceItems 数据存储为空,无论我是否填写它,我也有TicketInvoiceItems的动态字段,因为TicketInvoicehasMany()TicketInvoiceItems,所以无论我添加、填写和提交多少行字段,DB中只有一行记录存储,正如我上面所说,所有 Items 字段都存储为 null。

这是我TicketInvoiceControllerstore方法:

public function store(Request $request) {
  $ticketInvoiceItems = collect();

  $ticketInvoiceItems - > push(new TicketInvoiceItems([
    'ticket_invoice_id' => $request['ticket_invoice_id'],
    'passenger_name' => $request['passenger_name'],
    'ticket_no' => $request['ticket_no'],
    'departure_date' => $request['departure_date'],
    'fares' => $request['fares'],
    'sub_total' => $request['sub_total']
  ]));

  $ticketInvoice = TicketInvoice::create([
    'vendor_id' => $request['vendor_id'],
    'ticket_invoice_no' => $request['ticket_invoice_no'],
    'ticket_invoice_date' => $request['ticket_invoice_date'],
    'ticket_invoice_fares_total' => $request['ticket_invoice_fares_total'],
    'ticket_invoice_grand_total' => $request['ticket_invoice_grand_total'],
  ]);

  $ticketInvoice - > ticketInvoiceItems() - > saveMany($ticketInvoiceItems);
}

这是我的VueJs代码,我不知道我在这里是否犯了任何错误,请检查它:

< script >
  export default {
    data() {
      return {
        ticketInvoices: {},
        vendors: null,
        form: new Form({
          id: "",
          vendor_id: "",
          ticket_invoice_no: "",
          ticket_invoice_date: "",
          ticket_invoice_fares_total: "",
          ticket_invoice_grand_total: "",

          ticketInvoiceItems: [{
            id: "",
            ticket_invoice_id: "",
            passenger_name: "",
            ticket_no: "",
            departure_date: "",
            fares: "",
            sub_total: ""
          }]
        })
      };
    },

    methods: {
      createTicketInvoice() {
        this.form
          .post("api/ticket-invoice")
          .then(() => {
            Fire.$emit("RefreshTable");
          })
          .catch(() => {
            swal("Failed!", "There was something wrong.", "warning");
          });
      },

      addItems() {
        this.form.ticketInvoiceItems.push({
          id: "",
          ticket_invoice_id: "",
          passenger_name: "",
          ticket_no: "",
          departure_date: "",
          fares: "",
          sub_total: ""
        });
      },
      removeItems(pos) {
        this.form.ticketInvoiceItems.splice(pos, 1);
      },
      <
      /script>

【问题讨论】:

    标签: javascript laravel vue.js vuejs2 laravel-5.7


    【解决方案1】:

    我得到了答案……

    我没有在请求中正确访问TicketInvoiceItems 数据。我目前正在做:

    $ticketInvoiceItems - > push(new TicketInvoiceItems([
      'ticket_invoice_id' => $request['ticket_invoice_id'],
      'passenger_name' => $request['passenger_name'],
      'ticket_no' => $request['ticket_no'],
      'departure_date' => $request['departure_date'],
      'fares' => $request['fares'],
      'sub_total' => $request['sub_total']
    ]));
    

    但是我从前端发回的请求数据都包含在 ticketInvoiceItems 的数组中。

    所以我需要做类似的事情:

    foreach($request['ticketInvoiceItems'] as $invoiceItem) {
      $ticketInvoiceItems - > push(new TicketInvoiceItems([
        'ticket_invoice_id' => $invoiceItem['ticket_invoice_id'],
        'passenger_name' => $invoiceItem['passenger_name'],
        'ticket_no' => $invoiceItem['ticket_no'],
        'departure_date' => $invoiceItem['departure_date'],
        'fares' => $invoiceItem['fares'],
        'sub_total' => $invoiceItem['sub_total']
      ]));
    }
    

    此外,我在TicketInvoiceItems 上明确设置'ticket_invoice_id',因为这将由saveMany() 方法填充。

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2014-08-18
      • 2012-12-19
      • 2018-07-11
      • 1970-01-01
      • 2010-09-11
      相关资源
      最近更新 更多