Installation
composer require neuecommerce/default-records
Publish the config (optional):
php artisan vendor:publish --provider="Neuecommerce\DefaultRecords\DefaultRecordsServiceProvider"
Basic Usage
Define a default record for a model (e.g., User):
use Neuecommerce\DefaultRecords\HasDefaultRecords;
class User extends Model
{
use HasDefaultRecords;
}
Add a default record via migration or seeder:
User::setDefaultRecord(['name' => 'Guest', 'email' => 'default@example.com']);
First Use Case Fetch the default record when no other matches exist:
$defaultUser = User::findOrDefault(999); // Returns default if ID 999 doesn't exist
Default Record Resolution
findOrDefault() to fall back to defaults:
$user = User::findOrDefault($id);
$activeDefault = User::whereActive(true)->findOrDefault($id);
Dynamic Defaults
User::setDefaultRecord(['name' => 'API Guest'], 'api');
$default = User::findOrDefault($id, 'api');
Model Events
retrieved events to log default usage:
User::retrieved(function ($user) {
if ($user->isDefault()) {
Log::info("Default record used for ID: {$user->id}");
}
});
SoftDeletes trait.class User extends Model
{
public function scopeVerified($query) {
return $query->where('verified', true);
}
}
// Usage:
$user = User::verified()->findOrDefault($id);
Overwriting Defaults
User::setDefaultRecord($newAttributes);
Performance
findOrDefault() triggers two queries (find + default fetch). Cache defaults if used frequently:
$default = cache()->remember("user.default", now()->addHours(1), fn() => User::default());
Multiple Defaults
default_records.default_scope). Use named scopes ('api', 'web') to manage multiple defaults.User::default(); // Returns the active default record.
User::getDefaultScope(); // Returns the current scope (e.g., 'default').
Custom Default Logic
Override the getDefaultRecord() method in your model:
public function getDefaultRecord()
{
return $this->where('is_system', true)->first();
}
Event Hooks
Listen for default.record.retrieved to customize behavior:
event(new DefaultRecordRetrieved(User::class, $defaultUser));
Config Overrides
Modify config/default-records.php to:
How can I help you explore Laravel packages today?