Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana dan Bila Menggunakan saveQuietly() untuk Kemas Kini Senyap dalam Laravel

Bagaimana dan Bila Menggunakan saveQuietly() untuk Kemas Kini Senyap dalam Laravel

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 22:41:02809semak imbas

How and When to Use saveQuietly() for Silent Updates in Laravel

Dalam Laravel, saveQuietly() ialah kaedah yang tersedia pada model Eloquent yang membolehkan anda menyimpan model tanpa melancarkan sebarang acara, seperti mencipta, mencipta, mengemas kini, mengemas kini dan Eloquent lain acara model. Ini boleh berguna dalam situasi di mana anda ingin mengemas kini atau menyimpan data tanpa mencetuskan sebarang tindakan tambahan yang berkaitan dengan peristiwa tersebut, seperti pengelogan, pemberitahuan atau pengesahan data.

Berikut ialah panduan langkah demi langkah dengan contoh praktikal saveQuietly() dalam Laravel, termasuk penjelasan terperinci bagi setiap bahagian.

Contoh Senario

Bayangkan anda mempunyai model Pengguna, dan setiap kali pengguna dikemas kini, peristiwa mencetuskan yang menghantar pemberitahuan kepada pengguna. Walau bagaimanapun, dalam beberapa kes tertentu (seperti kemas kini pentadbir atau tugas penyelenggaraan latar belakang), anda mungkin mahu mengemas kini maklumat pengguna secara senyap tanpa mencetuskan pemberitahuan ini.

Langkah-langkah untuk Melaksanakan saveQuietly()

Langkah 1: Tentukan Model Pengguna dan Acara

Dalam model Pengguna anda, anda mungkin mempunyai pendengar acara untuk mengemas kini dan mengemas kini acara, yang akan dipecat apabila pengguna dikemas kini.

Contoh model Pengguna dengan acara:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}

Di sini, setiap kali pengguna dikemas kini:

  1. Acara pengemaskinian akan log maklumat tentang kemas kini.
  2. Acara yang dikemas kini akan menghantar pemberitahuan kepada pengguna.

Langkah 2: Kemas kini Pengguna Seperti Biasa

Apabila anda mengemas kini pengguna menggunakan save(), acara ini akan dicetuskan.

Contoh:

$user = User::find(1);
$user->status = 'active';
$user->save();

Hasil Jangkaan: Acara pengemaskinian dan kemas kini dicetuskan, yang bermaksud entri log akan dibuat dan pengguna akan dimaklumkan.

Langkah 3: Menggunakan saveQuietly() untuk Memintas Acara

Untuk mengelak daripada mencetuskan peristiwa ini (cth., jika pentadbir mengemas kini status pengguna sebagai sebahagian daripada operasi pukal), anda boleh menggunakan saveQuietly().

Contoh:

$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();

Dengan saveQuietly(), baik acara kemas kini mahupun kemas kini tidak dicetuskan, bermakna:

  • Tiada entri log dibuat untuk kemas kini.
  • Tiada pemberitahuan dihantar kepada pengguna.

Penjelasan Langkah demi Langkah saveQuietly()

  1. Cari Model: Ambil contoh model yang anda mahu kemas kini. Di sini, kami menggunakan User::find(1) untuk mendapatkan semula pengguna dengan ID 1.
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email', 'status'];

    protected static function booted()
    {
        // Event listener for updating
        static::updating(function ($user) {
            // Log or handle the update event
            \Log::info("User is being updated: {$user->id}");
        });

        // Event listener for updated
        static::updated(function ($user) {
            // Example action, such as sending a notification
            $user->notify(new \App\Notifications\UserUpdatedNotification());
        });
    }
}
  1. Ubah suai Atribut Model: Tukar atribut yang diperlukan pada model. Contohnya, menukar status daripada aktif kepada tidak aktif.
$user = User::find(1);
$user->status = 'active';
$user->save();
  1. Simpan Tanpa Mencetuskan Peristiwa: Gunakan saveQuietly() dan bukannya save(). Ini memastikan bahawa tiada pengemaskinian atau acara dikemas kini dipecat.
$user = User::find(1);
$user->status = 'inactive';
$user->saveQuietly();

Bila hendak menggunakan saveQuietly()

saveQuietly() bermanfaat dalam senario seperti:

  • Kemas Kini Pukal: Apabila melakukan kemas kini besar-besaran yang mencetuskan peristiwa boleh membawa kepada isu prestasi.
  • Pentadbiran Mengganti: Apabila pentadbir membuat kemas kini yang tidak memerlukan pemberitahuan.
  • Proses Latar Belakang: Untuk tugas berjadual atau skrip penyelenggaraan yang mengubah suai rekod tanpa perlu memaklumkan pengguna atau log perubahan.
  • Memintas Pengesahan/Pendengar: Apabila kemas kini khusus tidak perlu mematuhi pendengar atau pengesahan model standard.

Contoh Penuh dalam Pengawal

Begini cara anda boleh memasukkannya ke dalam pengawal Laravel untuk mengendalikan kemas kini pentadbir:

   $user = User::find(1);

Ringkasan

  • save() mencetuskan semua acara yang berkaitan, berguna untuk kemas kini standard.
  • saveQuietly() memintas acara ini, berguna untuk kemas kini senyap atau pukal tanpa pemprosesan tambahan.

Menggunakan saveQuietly() boleh menyelaraskan tugas dengan ketara apabila pengendalian acara tidak diperlukan, memberikan anda kawalan yang lebih besar ke atas tingkah laku model Eloquent dalam Laravel.

Atas ialah kandungan terperinci Bagaimana dan Bila Menggunakan saveQuietly() untuk Kemas Kini Senyap dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn