Обновление Записей Базы Данных В Laravel

Обновление  данных в 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
)

 

Давайте теперь поместим в него наш пост-пример. Так что у нас есть idtitle и 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().

Различия заключаются в следующем:

  1. Метод updateOrCreate() возвращает модель, в то время как updateOrInsert() возвращает логическое значение.
  2. updateOrCreate() это метод Eloquent Builder и updateOrInsert метод Query Builder.
DB::table('posts')
    ->updateOrInsert(
        ['title' => 'updated title', 'description' => 'updated description'],
        ['id' => '7']
    );

 


Читайте также

Как начинающему (и не только) программисту поднять уровень своей ЗП?

Не все программисты знают когда просить повышение и какие аргументы приводить. В этой статье вы найдёте план действий, который позволит вам повысить уровень вашей заработной платы в кратчайшие сроки.


Оставить коментарий

your email address will not be published. required fields are marked *

Имя *
Email *
Website