Laravel API - updateOrCreate - PullRequest
       0

Laravel API - updateOrCreate

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

Я использую updateOrCreate для хранения данных из моего поля Dynami c. Обновление работает, но у меня возникает ошибка при добавлении новой строки.

public function store(Request $request) {
    foreach($request->rows as $row) {
      $db = Book::updateOrCreate(['id' => $row['id']]);
      $db->author_id = $request->author_id;
      $db->publisher_id = $request->publisher_id;
      $db->title = $row['title'];
      $db->genre = $row['genre'];
      $db->save();
    }
  }

Я пробовал этот метод, но теперь он не работает как для обновления, так и для создания.

public function store(Request $request) {
    foreach($request->rows as $row) {
      $db = Book::updateOrCreate(
      ['id' => $row['id'],
      [
        'title' => $row['title'];
      ]
      ]);
    }
  }

Сообщение об ошибке enter image description here enter image description here

Ответы [ 3 ]

1 голос
/ 23 января 2020

updateOrCreate

Вы также можете столкнуться с ситуациями, когда вы хотите обновить существующую модель или создать новую модель, если ее не существует. Laravel предоставляет метод updateOrCreate для выполнения этого за один шаг. Как и метод firstOrCreate, updateOrCreate сохраняет модель, поэтому нет необходимости вызывать save ():

updateOrCreate (array $ attribute, array $ values ​​= [])

Это должно быть так. Но убедитесь, что в модели

опция1

//Option 1
foreach($request->rows as $row) {
    $db = Book::updateOrCreate(
        [
            'id' => $row['id'] ?? null
        ],
        [
            'author_id' => $request->author_id,
            'publisher_id' => $request->publisher_id,
            'title' => $row['title'],
            'genre' => $row['genre']
        ]
    );
}

опции2

// Options 2
foreach($request->rows as $row) {
    $input = [
         'author_id' => $request->author_id,
         'publisher_id' => $request->publisher_id,
         'title' => $row['title'],
         'genre' => $row['genre']
    ];
    if (isset($row['id'])) {
        if($db = Book::find($row['id'])) {
            $db->update($input);
            continue;
        }
    }

    Book::create($input);
}

РЕДАКТИРОВАТЬ:

ошибки * показывает, что ваши маршруты не приняли метод POST .. измените его на метод POST

Например: Route::post() вместо Route::get()

1 голос
/ 23 января 2020

updateOrCreate (array $ attribute, array $ values ​​= [])

Создать или обновить запись, соответствующую атрибутам, и заполнить ее значениями.

Так что ваши параметры не верны. Для этого нужны два параметра массива, а не один массив. Проверьте это: updateOrCreate

public function store(Request $request) {
    foreach($request->rows as $row) {
      $db = Book::updateOrCreate(
      ['id' => $row['id']],
      [
        'title' => $row['title']
      ]);
    }
  }
0 голосов
/ 23 января 2020

Убедитесь, что вы использовали Модели в своем контроллере

use App\ExampleModel;

напишите защищенные поля, которые можно заполнить, в вашей модели следующим образом:

protected $fillable = [
        'title','genre', ...
    ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...