Сохранение нескольких записей в БД - отношение один ко многим - PullRequest
0 голосов
/ 24 октября 2018

Я использую Laravel 5.7 & VueJs 2.5.* ...

Я хочу сохранить свои данные TicketInvoice и TicketInvoiceItems в базе данных. Когда я отправляю форму счета-фактуры, TicketInvoiceхранилище данных в DB, но TicketInvoiceItems хранилище данных как ноль, независимо от того, заполняю я это или нет, также у меня есть динамические поля для TicketInvoiceItems, потому что TicketInvoice hasMany() TicketInvoiceItems, поэтому независимо от того, сколько строк я добавлю в строку, заполните и отправьте, только одна запись строки хранится в DB, и, как я уже говорил выше, все поля элементов сохраняются как нулевые.

Вот мой store метод TicketInvoiceController:

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>

1 Ответ

0 голосов
/ 24 октября 2018

Я получил ответ ...

Я неправильно обращаюсь к данным 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']
  ]));
}

Также я явно устанавливаю 'ticket_invoice_id' на TicketInvoiceItems, так как это будет заполнено методом saveMany().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...