Database utama dazoapp adalah MongoDB, bukan MySQL. Asumsi umum Laravel (Eloquent + migration) sebagian besar salah di sini.
Koneksi
Ada 4 koneksi terdaftar di config/database.php:
| Koneksi | Driver | Kegunaan |
|---|---|---|
mongodb | MongoDB | Default. 77 dari 79 model |
crm | MongoDB | Database CRM terpisah (nonaktif — tidak dipakai) |
covendor | MongoDB | Data vendor |
mysql | MySQL | Hanya 2 model: UserAspire, UserRole |
Model — MongoDB vs Eloquent
77 model memakai MongoDB\Laravel\Eloquent\Model:
use MongoDB\Laravel\Eloquent\Model; // BENAR — bukan Illuminate\Database\Eloquent\Model
class Order extends Model
{
// ...
}Hanya 2 model yang memakai Eloquent MySQL:
app/Models/UserAspire.phpapp/Models/UserRole.php
Tidak ada migration sebagai acuan skema
Direktori database/migrations/ hanya berisi 7 file warisan Laravel (users, sessions, jobs, dll). Ini bukan acuan struktur data.
Karena MongoDB schemaless, struktur koleksi tidak terversi. Bentuk sebuah dokumen hanya bisa diketahui dengan:
- Membaca controller yang menulisnya
- Membaca seeder terkait
- Query langsung ke database
Pola seeder untuk perubahan struktur
Perubahan bentuk data dilakukan lewat seeder, bukan migration. Contoh: database/seeders/BackfillWalletFieldsSeeder.php.
php artisan db:seed --class=BackfillWalletFieldsSeederPrimary key — UUID string
Seluruh model MongoDB memakai UUID string sebagai primary key, di-generate di boot():
public $incrementing = false;
protected $keyType = 'string';
protected $primaryKey = 'id';
protected static function boot()
{
parent::boot();
static::creating(fn($model) => $model->id = (string) Str::uuid());
}Ini berlaku untuk semua model MongoDB. Jangan asumsikan id adalah integer auto-increment.
Relasi
Contoh dari app/Models/Order.php:
public function product()
{
return $this->belongsTo('App\Models\Product', 'product_id', 'id');
}
public function customer()
{
return $this->hasOne('App\Models\Customer', 'id', 'customer_id');
}
public function order_item()
{
return $this->hasMany('App\Models\OrderItem', 'order_id', 'id');
}Helper global
app/Helpers/helpers.php di-autoload via composer.json "files". Berisi fungsi global seperti generateUUIDv4(), findPermissionByName(), getDomainList(). Tidak perlu import untuk memakai.
Jangan berasumsi bentuk data
Jika bentuk dokumen MongoDB tidak jelas, katakan — jangan menebak. Baca controller yang menulisnya + seeder terkait sebelum menulis query baru.
79 model — daftar singkat
| Kategori | Contoh model |
|---|---|
| Order & Payment | Order, OrderItem, OrderPayment, Wallet, WalletTransaction, SubscriptionPayment, SubscriptionInvoice, Expense |
| Produk & Inventory | Product, ProductVariant, Variation, Stock, ItemProduct, Category, Collection |
| Customer & Kontak | Customer, Tag, Segment, CrmWorkspace (nonaktif), CrmUser (nonaktif) |
Device, Agent, ChatList, ChatHistory, ChatOrder, ChatCheckout, Chatbot | |
| Broadcast | BroadcastSceduler, BroadcastMessage, BroadcastLog |
| Digital Store | DigitalStore, DigitalStorePage, PreviewDigitalStore, DraftStoresDigital |
| Marketing | Biolink, CustomDomain, Domain, Pixel, Conversion, RegistrationLink |
| Shipping | Province, City, Subdistrict, Warehouse, HandleGudang, Bank, BankPayment |
| Team & Setting | User, UserStore, UserRole, UserAspire, Store, Setting, Package |
| AI Agent | Agent, AgentTestingInbox, ResponseTemplate, TemplateMessage, Flow |
| Lain | Notification, LoginLog, Log, LogRequestOpenai, EmailVerification, WaVerification, WellcomeMessage, CodeTelp, Kupon, Coupon, TicketingFeedback, PlatformSetting, VendorUser, TeamchatInbox |
Langkah berikutnya
- Akan menulis query? Wajib baca Multi-tenant —
store_idscoping. - Butuh auth? Baca Auth & JWT — JWT adalah kontrak lintas-service.