3.1
Referensi Opsi Konfigurasi
Berkas config/userstamps.php dipublikasikan dengan perintah php artisan vendor:publish --tag="userstamps-config" (README.md:16-201). Paket mendaftarkannya sebagai config bernama userstamps lewat hasConfigFile('userstamps') (src/UserstampsServiceProvider.php:182). 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.| Kunci | Default | Dibaca di | Efek |
|---|---|---|---|
is_using_morph | false (config/userstamps.php:13-183) | macro, trait, observer | Menambah kolom _type, mengubah tipe kolom _id, dan memilih morphTo atau belongsTo |
users_table | 'users' (config/userstamps.php:26-334) | addUserIdColumn (src/Database/Schema/Macros/UserstampsMacro.php:215) | Tabel tujuan foreign(); diabaikan saat morph aktif |
users_model | User::class (config/userstamps.php:41-486) | createdBy(), updatedBy(), deletedBy() (src/Concerns/HasUserstamps.php:24-287) | Kelas model pada belongsTo; diabaikan saat morph aktif |
users_table_id_column_type | 'bigIncrements' (config/userstamps.php:56-608) | addUserIdColumn (src/Database/Schema/Macros/UserstampsMacro.php:20-409) | Tipe kolom _id yang dibuat |
users_table_id_column_name | 'id' (config/userstamps.php:66-7110) | macro, trait, observer | Kolom yang direferensikan foreign key, owner key relasi, dan kolom yang dibaca dari user |
created_by_column | 'created_by' (config/userstamps.php:77-8411) | macro, observer, trait | Nama dasar created_by_id dan created_by_type |
updated_by_column | 'updated_by' (config/userstamps.php:90-9712) | macro, observer, trait | Nama dasar updated_by_id dan updated_by_type |
deleted_by_column | 'deleted_by' (config/userstamps.php:103-11013) | softUserstamps(), observer | Nama dasar deleted_by_id dan deleted_by_type |
with_trashed | false (config/userstamps.php:116-12014) | relasi trait (src/Concerns/HasUserstamps.php:3115) | 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-6616). softUserstamps() mengikuti pola yang sama untuk deleted_by_column (src/Database/Schema/Macros/UserstampsMacro.php:74-8117).
| Macro | is_using_morph = false | is_using_morph = true |
|---|---|---|
$table->userstamps() | created_by_id, updated_by_id | ditambah created_by_type, updated_by_type |
$table->softUserstamps() | deleted_by_id | ditambah deleted_by_type |
Perilaku ini diuji langsung: hanya kolom _id yang muncul saat morph nonaktif (tests/Feature/UserstampsColumnsTest.php:11-3118), sedangkan kolom _type ikut muncul saat morph aktif (tests/Feature/UserstampsColumnsTest.php:33-5319). Mengganti nilai ketiga kunci nama kolom ke author, modifier, dan remover menghasilkan author_id, modifier_id, dan remover_id (tests/Feature/UserstampsColumnsTest.php:55-7820).
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-4021).
users_table_id_column_type | Morph false | Morph true |
|---|---|---|
bigIncrements (default) | foreignId() | unsignedBigInteger() |
uuid | foreignUuid() | uuid() |
ulid | foreignUlid() | ulid() |
increments atau nilai lain | unsignedInteger() | unsignedInteger() |
Komentar konfigurasi hanya mencantumkan increments, bigIncrements, uuid, dan ulid sebagai opsi (config/userstamps.php:5622). 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-4723).
is_using_morph harus ditetapkan sebelum migration
⚠️ Komentar resmi memperingatkan agar
is_using_morphdiaktifkan atau dinonaktifkan sebelummigrationdijalankan, karena nilainya mempengaruhi cara kolom relasi dibuat (config/userstamps.php:13-1524).
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.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-10225). dropSoftUserstamps melakukan hal serupa untuk deleted_by_column (src/Database/Schema/Macros/UserstampsMacro.php:110-12026). 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:3115, src/Concerns/HasUserstamps.php:4627, src/Concerns/HasUserstamps.php:6128). 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-3229). Komentar konfigurasi menyatakan hal yang sama untuk kedua kunci tersebut (config/userstamps.php:26-3230).
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-10731). Nilai _id dan _type ditulis pada event creating, updating, deleting, dan restoring (src/Observers/UserstampsObserver.php:11-2732, 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.