Lompat ke konten
dokumentasi.id
Commit 159d6ac
v1
Star1

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

3.1

Referensi Opsi Konfigurasi

Berkas config/userstamps.php dipublikasikan dengan perintah php artisan vendor:publish --tag="userstamps-config" (README.md:16-20). Paket mendaftarkannya sebagai config bernama userstamps lewat hasConfigFile('userstamps') (src/UserstampsServiceProvider.php:18). Berkas itu berisi sembilan kunci, dan setiap kunci dibaca dengan pola config('userstamps.<kunci>') oleh tiga konsumen: macro Blueprint, trait HasUserstamps, dan UserstampsObserver. Halaman ini memetakan tiap kunci ke kolom dan relasi yang dihasilkannya; langkah publikasi berkasnya sendiri ada di Instalasi dan Publikasi Config.

Pemetaan kunci ke kolom

Diagram berikut menunjukkan kunci mana yang menentukan nama kolom, kunci mana yang menentukan tipe kolom, dan kunci mana yang hanya menentukan bentuk relasi.

graph TD
    subgraph CFG["config/userstamps.php"]
        A["is_using_morph"]
        B["created_by_column<br/>updated_by_column"]
        C["deleted_by_column"]
        D["users_table_id_column_type"]
        E["users_table<br/>users_table_id_column_name"]
    end

    M1["userstamps()"]
    M2["softUserstamps()"]
    Q{"is_using_morph<br/>= true?"}

    T["foreignId / foreignUuid / foreignUlid<br/>atau unsignedBigInteger"]
    ID1["created_by_id<br/>updated_by_id"]
    ID2["deleted_by_id"]
    TY1["created_by_type<br/>updated_by_type"]
    TY2["deleted_by_type"]
    FK["FK references users_table_id_column_name<br/>on users_table dengan nullOnDelete"]

    B --> M1
    C --> M2
    A --> Q
    D --> T
    T --> ID1
    T --> ID2
    M1 --> ID1
    M2 --> ID2
    Q -->|true| TY1
    Q -->|true| TY2
    Q -->|false| FK
    E --> FK

    style A fill:#f59e0b,color:#000
    style B fill:#f59e0b,color:#000
    style C fill:#f59e0b,color:#000
    style D fill:#f59e0b,color:#000
    style E fill:#f59e0b,color:#000
    style Q fill:#f59e0b,color:#000
    style M1 fill:#f59e0b,color:#000
    style M2 fill:#f59e0b,color:#000
    style T fill:#336791,color:#fff
    style ID1 fill:#336791,color:#fff
    style ID2 fill:#336791,color:#fff
    style FK fill:#2d7d46,color:#fff
    style TY1 fill:#8b5cf6,color:#fff
    style TY2 fill:#8b5cf6,color:#fff
%% fig: Kunci config ke kolom yang dihasilkan
%% desc: Kunci nama kolom memberi nama dasar, kunci tipe kolom menentukan tipe _id, dan is_using_morph memilih cabang kolom _type atau foreign key.
Fig. 1: Kunci config ke kolom yang dihasilkanKunci nama kolom memberi nama dasar, kunci tipe kolom menentukan tipe _id, dan is_using_morph memilih cabang kolom _type atau foreign key.
KunciDefaultDibaca diEfek
is_using_morphfalse (config/userstamps.php:13-18)macro, trait, observerMenambah kolom _type, mengubah tipe kolom _id, dan memilih morphTo atau belongsTo
users_table'users' (config/userstamps.php:26-33)addUserIdColumn (src/Database/Schema/Macros/UserstampsMacro.php:21)Tabel tujuan foreign(); diabaikan saat morph aktif
users_modelUser::class (config/userstamps.php:41-48)createdBy(), updatedBy(), deletedBy() (src/Concerns/HasUserstamps.php:24-28)Kelas model pada belongsTo; diabaikan saat morph aktif
users_table_id_column_type'bigIncrements' (config/userstamps.php:56-60)addUserIdColumn (src/Database/Schema/Macros/UserstampsMacro.php:20-40)Tipe kolom _id yang dibuat
users_table_id_column_name'id' (config/userstamps.php:66-71)macro, trait, observerKolom yang direferensikan foreign key, owner key relasi, dan kolom yang dibaca dari user
created_by_column'created_by' (config/userstamps.php:77-84)macro, observer, traitNama dasar created_by_id dan created_by_type
updated_by_column'updated_by' (config/userstamps.php:90-97)macro, observer, traitNama dasar updated_by_id dan updated_by_type
deleted_by_column'deleted_by' (config/userstamps.php:103-110)softUserstamps(), observerNama dasar deleted_by_id dan deleted_by_type
with_trashedfalse (config/userstamps.php:116-120)relasi trait (src/Concerns/HasUserstamps.php:31)Menambahkan withTrashed() pada ketiga relasi; tidak menyentuh kolom

Kolom yang dihasilkan

userstamps() menyusun nama kolom dengan menempelkan akhiran _id pada created_by_column dan updated_by_column, lalu memanggil addUserIdColumn untuk masing-masing. Kolom _type bertipe string dan nullable, dan hanya ditambahkan ketika is_using_morph bernilai true (src/Database/Schema/Macros/UserstampsMacro.php:52-66). softUserstamps() mengikuti pola yang sama untuk deleted_by_column (src/Database/Schema/Macros/UserstampsMacro.php:74-81).

Macrois_using_morph = falseis_using_morph = true
$table->userstamps()created_by_id, updated_by_idditambah created_by_type, updated_by_type
$table->softUserstamps()deleted_by_idditambah deleted_by_type

Perilaku ini diuji langsung: hanya kolom _id yang muncul saat morph nonaktif (tests/Feature/UserstampsColumnsTest.php:11-31), sedangkan kolom _type ikut muncul saat morph aktif (tests/Feature/UserstampsColumnsTest.php:33-53). Mengganti nilai ketiga kunci nama kolom ke author, modifier, dan remover menghasilkan author_id, modifier_id, dan remover_id (tests/Feature/UserstampsColumnsTest.php:55-78).

Tipe kolom _id

addUserIdColumn membaca users_table_id_column_type lalu memilih cabang lewat match. Semua cabang menghasilkan kolom nullable() (src/Database/Schema/Macros/UserstampsMacro.php:17-40).

users_table_id_column_typeMorph falseMorph true
bigIncrements (default)foreignId()unsignedBigInteger()
uuidforeignUuid()uuid()
ulidforeignUlid()ulid()
increments atau nilai lainunsignedInteger()unsignedInteger()

Komentar konfigurasi hanya mencantumkan increments, bigIncrements, uuid, dan ulid sebagai opsi (config/userstamps.php:56). increments tidak punya cabang tersendiri, sehingga nilainya jatuh ke cabang default dan menghasilkan unsignedInteger() pada kedua mode. Saat morph nonaktif, setiap kolom _id juga mendapat foreign key ke users_table.users_table_id_column_name dengan nullOnDelete() (src/Database/Schema/Macros/UserstampsMacro.php:42-47).

is_using_morph harus ditetapkan sebelum migration

⚠️ Komentar resmi memperingatkan agar is_using_morph diaktifkan atau dinonaktifkan sebelum migration dijalankan, karena nilainya mempengaruhi cara kolom relasi dibuat (config/userstamps.php:13-15).

Nilai itu dibaca di dalam closure macro, jadi ia hanya menentukan bentuk kolom pada saat migration dieksekusi. Setelah kolom terbentuk, mengubah nilai kunci tersebut tidak mengubah skema yang sudah ada.

graph LR
    S1["Set is_using_morph"] --> S2["php artisan migrate"]
    S2 --> S3["Skema fisik terbentuk"]
    S3 --> S4["Ubah nilai is_using_morph"]
    S4 --> S5["Skema tidak berubah<br/>perlu migration baru"]
    style S1 fill:#f59e0b,color:#000
    style S2 fill:#336791,color:#fff
    style S3 fill:#336791,color:#fff
    style S4 fill:#dc2626,color:#fff
    style S5 fill:#dc2626,color:#fff
%% fig: Urutan penetapan is_using_morph
%% desc: Nilai kunci hanya berpengaruh saat migration dijalankan; perubahan setelahnya tidak mengubah kolom yang sudah terbentuk.
Fig. 2: Urutan penetapan is_using_morphNilai kunci hanya berpengaruh saat migration dijalankan; perubahan setelahnya tidak mengubah kolom yang sudah terbentuk.

Macro pembalik juga membaca kunci yang sama. dropUserstamps menyusun daftar kolom dari created_by_column dan updated_by_column, menambahkan _type hanya bila morph aktif, dan memanggil dropForeign hanya pada cabang non-morph (src/Database/Schema/Macros/UserstampsMacro.php:89-102). dropSoftUserstamps melakukan hal serupa untuk deleted_by_column (src/Database/Schema/Macros/UserstampsMacro.php:110-120). Karena itu, nilai is_using_morph yang berbeda dari saat migration membuat down() menyentuh kolom atau constraint yang tidak sesuai dengan skema nyata. Rincian bentuk skema morph dibahas di Morph dan Tipe Kolom ID.

with_trashed dan kunci yang hanya berlaku tanpa morph

with_trashed hanya mempengaruhi relasi. createdBy(), updatedBy(), dan deletedBy() mengembalikan $relation->withTrashed() bila nilainya true (src/Concerns/HasUserstamps.php:31, src/Concerns/HasUserstamps.php:46, src/Concerns/HasUserstamps.php:61). Kunci ini tidak menambah atau mengubah kolom apa pun.

users_table dan users_model diabaikan saat morph aktif, karena relasi memakai morphTo() dengan kolom _type dan _id (src/Concerns/HasUserstamps.php:19-32). Komentar konfigurasi menyatakan hal yang sama untuk kedua kunci tersebut (config/userstamps.php:26-32).

users_table_id_column_name juga dibaca saat runtime oleh observer. Bila nilainya bukan 'id', observer mengambil $user->{$idColumn}; jika tidak, ia memakai auth()->id() (src/Observers/UserstampsObserver.php:91-107). Nilai _id dan _type ditulis pada event creating, updating, deleting, dan restoring (src/Observers/UserstampsObserver.php:11-27, src/Observers/UserstampsObserver.php:30-40, src/Observers/UserstampsObserver.php:42-59, src/Observers/UserstampsObserver.php:61-78). Pemeriksaan $model->isClean() memakai nama dasar kolom, yaitu tanpa akhiran _id (src/Observers/UserstampsObserver.php:11). Siklus event itu dijelaskan di Observer dan Siklus Event Model, sedangkan pemakaian kolom pada migration dibahas di Migrasi dan Kolom Userstamps.