Сохранение нескольких данных из динамической формы c в Laravel и Vue JS - PullRequest
1 голос
/ 19 апреля 2020

У меня есть динамическая форма c, которая успешно добавляет несколько строк, нажав на кнопку добавления. проблема заключается в том, что когда я пытаюсь сохранить данные в базе данных, выдается следующее сообщение об ошибке:

{message: "Недопустимое смещение строки 'supplier_id'", исключение: "ErrorException",…} исключение: " ErrorException "file:" C: \ xampp \ htdocs \ Bookstore \ app \ Http \ Controllers \ API \ PurchaseController. php "строка: 87 сообщение:" Недопустимое смещение строки 'supplier_id' "trace: [{file:" C: \ xampp \ htdocs \ Bookstore \ app \ Http \ Controllers \ API \ PurchaseController. php ", строка: 87,…},…]

и помощь будет высоко оценена

Код в контроллере

 public function store(Request $request)
    {

$products = json_decode($request->getContent('myArray') , true);

    foreach( $products as $product )
    {
        Purchase::create([
            'supplier_id' => $product['supplier_id'],
            'date' => $product['date'],
            'totalAmount' => $product['totalAmount'],
            'description' => $product['description']

        ]);
    }

        //   return dd($myArray);
       return response()->json($Purchase);            


    }

Форма в закупках Vue

   <form
            @submit.prevent="
                            editMode ? updatePurchase() : createPurchase()
                        "
          >
            <div class="modal-body">
              <div class="form-horizontal">
                <tr v-for="(invoice_product, k) in invoice_products" :key="k">

                  <td scope="row" class="trashIconContainer">
                    <i class="fa fa-trash" @click="deleteRow(k, invoice_product)"></i>
                  </td>
                  <td style="width: 20%;">

                    <select
                      name="supplier_id[]"
                      id="supplier_id"
                      :class="{
                                        'is-invalid': form.errors.has(
                                            'supplier_id'
                                        )
                                    }"
                      class="form-control"
                      v-model="invoice_product.supplier_id"
                      data-live-search="true"
                    >
                      <option value selected>د پلورونکي ټاکنه</option>
                      <option
                        v-for="Supplier in Suppliers"
                        :key="Supplier.id"
                        :value="Supplier.id"
                      >{{ Supplier.name }}</option>
                    </select>
                    <has-error :form="form" field="supplier_id"></has-error>
                  </td>
                  <td style="width: 20%;padding-right: 10px;">
                    <input
                      dir="rtl"
                      id="text1"
                      v-model="invoice_product.date"
                      placeholder="نیټه "
                      type="date"
                      name="date[]"
                      class="form-control"
                      :class="{
                                        'is-invalid': form.errors.has('date')
                                    }"
                    />
                    <has-error :form="form" field="date"></has-error>
                  </td>
                  <td style="width: 20%;padding-right: 10px;">
                    <input
                      dir="rtl"
                      id="text1"
                      v-model="invoice_product.totalAmount"
                      placeholder="  ټولی پیسی "
                      type="number"
                      name="totalAmount[]"
                      class="form-control"
                      :class="{
                                        'is-invalid': form.errors.has(
                                            'totalAmount'
                                        )
                                    }"
                    />
                    <has-error :form="form" field="totalAmount"></has-error>
                  </td>
                  <td style="width: 40%;padding-right: 10px;">
                    <textarea
                      v-model="invoice_product.description"
                      placeholder="تشریح"
                      type="text"
                      name="description[]"
                      class="form-control"
                      :class="{
                                        'is-invalid': form.errors.has(
                                            'description'
                                        )
                                    }"
                    ></textarea>

                    <has-error :form="form" field="description"></has-error>
                  </td>
                </tr>
                <button type="button" class="btn btn-info" @click="addNewRow">
                  <i class="fa fa-plus-circle"></i>
                  Add
                </button>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-danger" data-dismiss="modal">لغوه کړی</button>

                <button
                  v-show="editMode"
                  :disabled="form.busy"
                  type="submit"
                  class="btn btn-success"
                >تازه کړی</button>
                <button
                  v-show="!editMode"
                  :disabled="form.busy"
                  type="submit"
                  class="btn btn-primary"
                >خوندی کړی</button>
              </div>
            </div>
          </form>

Скрипт в закупках Vue

 data() {
    return {
      invoice_products: [
        {
          supplier_id: "",
          totalAmount: "",
          date: "",
          description: ""
        }
      ],
}
 deleteRow(index, invoice_product) {
      var idx = this.invoice_products.indexOf(invoice_product);
      console.log(idx, index);
      if (idx > -1) {
        this.invoice_products.splice(idx, 1);
      }
      this.calculateTotal();
    },
    addNewRow() {
      this.invoice_products.push({
        supplier_id1: "",
        totalAmount1: "",
        date1: "",
        description1: ""
      });
    },
 createPurchase() {

      axios
        .post("api/Purchase", {
          myArray: this.invoice_products
        })
        .then(() => {
          $("#addNew").modal("hide");
          toast.fire({
            icon: "success",
            html: "<h5> معلومات په بریالیتوب سره خوندي شول</h5>"
          });
          Fire.$emit("refreshPage");
          this.form.reset();
        })
        .catch(er => {
          console.log(er);
        });

    },

1 Ответ

1 голос
/ 19 апреля 2020

Я нашел решение

public function store(Request $request)
    {

  if ($purchases= $request->get('myArray')) {
    foreach($purchases as $purchase) {
      Purchase::create([
            'supplier_id' => $purchase['supplier_id'],
            'date' => $purchase['date'],
            'totalAmount' => $purchase['totalAmount'],
            'description' => $purchase['description']

        ]);
    }
  }

       return response()->json();            


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