Обновление данных в Laravel
В этом уроке мы рассмотрим простой пример записи в блоге. Так что нам нужна Post модель. Вы можете легко создать модель, выполнив следующую команду.
php artisan make:model Post -m
После выполнения вышеуказанной команды в каталоге app/Models
создается новый файл модели. Если вы используете более старую версию, чем Laravel 8, то она будет создана в app/
каталоге.
Флаг -m
на приведенной выше команде обозначает, что файл миграции создается вместе с созданием модели. Таким образом, вы можете найти новые файлы миграции в папке database/migrations
.
Теперь давайте откроем вновь созданные файлы миграции и обновим up()
метод, как показано ниже:
Файл миграции
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
* One to many relationship tutorial
* scratchcode.io
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
* One to many relationship tutorial
* scratchcode.io
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Теперь выполните следующую команду, чтобы создать posts
таблицу в вашей базе данных:
php artisan migrate
Теперь давайте обновим записи в Laravel, следуя различным методам.
1. использование метода save()
Как следует из названия, для сохранения записей используется метод save (). В этом методе сначала нам нужно найти запись, а затем мы можем добавить в нее дополнительные данные, а затем сохранить записи. Таким образом, он обновит записи в базе данных.
$post = Post::find(1);
$post->title = "Updated title";
$post->description = "Updated description";
$post->save();
02 использование метода update ()
Метод update() используется для обновления записей, как следует из названия. Мы можем использовать его с условием where как показано ниже:
$affectedRecords = Post::where("id", 3)->update(["title" => "Updated title"]);
03 использование метода updateOrCreate()
Метод updateOrCreate() обновит запись, если она будет найдена, или создаст новую. Определите, что вы хотите обновить в первом аргументе. Второй аргумент этой функции уникален и ведет себя как условие where.
$post = Post::updateOrCreate(
['title' => 'New or update title', 'description' => 'this is description'],
['id' => 1] // Like where condition
);
04 обновление нескольких записей с помощью функции upsert() в Laravel
upsert() - очень интересная функция в Laravel. Эта функция используется для обновления нескольких записей в Laravel.
Вам просто нужно определить, что вы хотите обновить в первом аргументе, но с некоторыми уникальными полями, и во втором аргументе определить, какие поля уникальны для обновления, а в третьем аргументе перечислить поля, которые фактически будут обновлены в базе данных.
Мы попытались создать следующий пример для лучшего понимания.
Model::upsert([
[ 'field1' => 'value', 'field2' => 'value', 'field3' => 'value', ........ ],
[ 'field1' => 'value', 'field2' => 'value', 'field3' => 'value', ........ ],
[ 'field1' => 'value', 'field2' => 'value', 'field3' => 'value', ........ ],
],
[ 'field1', 'field2' ], // Unique field like where condition
[ 'field3' ], // These fields will be updated in db
)
Давайте теперь поместим в него наш пост-пример. Так что у нас есть id
title
и description
поля в таблице posts
.
В том, что id
является уникальным полем для нас, в то время как два других могут быть обновлены. Давайте обновим записи идентификаторов 11, 7 и 9 с помощью upsert()
Post::upsert([
[ 'id' => 11, 'title' => 'update or create 11', 'description' => 'test 11' ],
[ 'id' => 7, 'title' => 'update or create 7', 'description' => 'test 7' ],
[ 'id' => 9, 'title' => 'update or create 9', 'description' => 'test 9' ],
],
[ 'id' ], // Unique field like where condition
[ 'title', 'description' ], // These fields will be updated in db
)
В этом обратном процессе upsert() ведет себя как обновление цикла. Таким образом, все 3 вышеперечисленные записи будут находиться в цикле title
и description
столбце и обновляться с id
условием where. Так просто, правда?
05 использование метода updateOrInsert()
Метод updateOrInsert() аналогичен методу updateOrCreate() иногда вы можете обновить существующую запись в базе данных или создать ее, если соответствующая запись не существует. В этом случае может быть использован метод updateOrInsert().
Различия заключаются в следующем:
- Метод updateOrCreate() возвращает модель, в то время как updateOrInsert() возвращает логическое значение.
- updateOrCreate() это метод Eloquent Builder и updateOrInsert метод Query Builder.
DB::table('posts')
->updateOrInsert(
['title' => 'updated title', 'description' => 'updated description'],
['id' => '7']
);