Models
Every XTDB row is identified by _id, and XTDB generates no keys. Use HasXtdbKey: the key is _id, a ULID generated when the model is created.
php
use Illuminate\Database\Eloquent\Model;
use LaravelXtdb\Eloquent\Casts\AsDocument;
use LaravelXtdb\Eloquent\HasXtdbKey;
class User extends Model
{
use HasXtdbKey;
protected function casts(): array
{
return [
'active' => 'boolean',
'settings' => AsDocument::class, // a queryable nested document
];
}
}
User::create(['name' => 'Alice', 'settings' => ['theme' => 'dark', 'tags' => ['a']]]);
User::where('settings->theme', 'dark')->whereJsonContains('settings->tags', 'a')->get();- Relations, soft deletes, casts, pagination,
chunk(),cursor(),firstOrCreate()andupdateOrCreate()work as usual. Foreign keys are ordinary columns holding the related_id. - A model keeping Laravel's incrementing
idgets a random positive 64-bit integer, stored asidand_id. DB::table()->insert()adds a ULID_idto rows without one;insertGetId()returns the generated key.- Laravel's
array/jsoncasts store JSON text, whose fields XTDB cannot query: useAsDocument, or bindnew LaravelXtdb\Query\Document([...])in the query builder.