Works like an attribute
$user->tax_bracket, fill(), create(), update() and toArray() all work. Real columns always win.
Define fields at runtime. Use them like normal attributes. No new columns.
class User extends Model
{
use HasCustomFields;
}
CustomFields::create([
'model' => User::class,
'key' => 'tax_bracket',
'label' => 'Tax bracket',
'type' => 'select',
'settings' => ['options' => ['a' => 'A', 'b' => 'B']],
]);
$user = User::create(['name' => 'Ken', 'tax_bracket' => 'b']);
$user->tax_bracket; // "b"
User::whereCustomField('tax_bracket', 'b')->get();