Vue / Laravel - Dynami c сохранение нескольких данных формы - PullRequest
0 голосов
/ 20 января 2020

У меня есть динамическая форма c, которая успешно добавляет несколько полей одним нажатием кнопки. Моя проблема возникает при сохранении данных в базе данных. Я хочу сохранить в поле employee_id значение id из Auth::user.

Это мой текущий набор кодов. Следует ли использовать другой подход, например for loop вместо foreach?

Компонент. vue

           <tr v-for="(row, index) in rows" :key="row.id">
              <td><base-select
                :items="department_objectives"
                item-text="department_objective" 
                item-value="id" 
                label="Department Objectives"
              /></td>
              <td><v-textarea label="KPA" placeholder=" " class="mr-2" rows="1" outlined v-model="row.kpa" /></td>
              <td><v-textarea label="KPI" placeholder=" " class="mr-2" rows="1" outlined v-model="row.kpi" /></td>
              <td><v-text-field label="Weight" placeholder=" " class="mr-2" outlined  v-model="row.weight" /></td>
              <td><v-text-field label="Score" placeholder=" " class="mr-2" outlined :disabled="disabled" filled v-model="row.score" /></td>
              <td><a @click="removeElement(index);" style="cursor: pointer">Remove</a></td>
           </tr>

 addRow () {
        this.rows.push({
          kpa: '',
          kpi: '',
          weight: '',
          score: '',
          equal: '',
        });

 save () {
        axios
        .post('/api/employee-objective', { data: this.rows })
        .then(res => { console.log(res) })
        .catch(err => { console.log(err) });
      }

Контроллер. php

  public function store(Request $request) {
        foreach($request->data as $data) {
        $container = EmployeeObjective::updateOrCreate([
          'employee_id' => // insert ID
          'kpa_info' => $data['kpa'],
          'kpi_info' => $data['kpi'],
          'kpa_weight' => $data['weight'],
          'kpa_score_1' => $data['score'],
          'kpa_equal' => $data['equal'],
      ]);
      $container->save();
    }
  }

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Мне удалось заставить его работать, так или иначе этот синтаксис работает. Надеюсь, кто-то может рассказать мне больше об этом.

Контроллер. php

    public function store(Request $request) 
    // This works
    foreach($request->rows as $data) {
      $test = new EmployeeObjective;
      $test->employee_id = $request->id;
      $test->kpa_info = $data['kpa'];
      $test->save();

    // This does not work
    foreach($request->rows as $data) {
      EmployeeObjective::updateOrCreate([
     'employee_id' => $request->id,
     'kpa_info' => $data['kpa'],

Теперь вот сложная часть. Я сохранил данные из $store в свой локальный объект и передал их во время метода сохранения.

Компонент. vue

created () {
  this.auth = this.$store.state.authUser.id
},

save () {
  axios.post('/api/employee-objective', { 
    rows: this.rows, 
    id: this.auth
  })
  .then(res => { console.log(res) })
  .catch(err => { console.log(err) });
}
0 голосов
/ 20 января 2020

Это нормально, используя foreach, пока доступны все необходимые данные, такие как ключ

, чтобы поместить идентификатор аутентифицированного пользователя в employee_id, просто поместите этот

Auth::id();

и поместите его выше ваш код

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