sridhar-s-subramanian/filament-dbview
Installation:
composer require sridhar-s-subramanian/filament-dbview
Publish the config (optional):
php artisan vendor:publish --provider="SridharSubramanian\FilamentDbView\FilamentDbViewServiceProvider"
Register in Panel:
Add to your Filament panel provider's panel() method:
->plugin(FilamentDbViewPlugin::make())
First Use Case:
SELECT queries (e.g., SELECT * FROM users LIMIT 10).Model-Based Exploration:
User::query()).posts for a User).Table component for ad-hoc data inspection.EXPLAIN SELECT * FROM orders WHERE status = 'pending').dbview_queries table by default).SELECT COUNT(*) FROM users WHERE email IS NULL).Integration with Filament Features:
canAccessFilamentDbView).
FilamentDbViewPlugin::make()->middleware([Authorize::class, VerifyCsrfToken::class]);
config/filament-dbview.php):
'labels' => [
'database_browser' => __('Custom Database Browser'),
],
php artisan vendor:publish --tag="filament-dbview-migrations"
Debugging Workflow:
orders).SELECT created_at FROM orders WHERE status = 'shipped' ORDER BY created_at DESC).SELECT * FROM users WHERE role = 'admin' INTO OUTFILE '/tmp/admins.csv';
Strict Read-Only:
INSERT, UPDATE, DELETE). Attempts to run such queries will fail silently or return errors.php artisan tinker for writes.Model Discovery:
migrations) are hidden.App\Models namespace is correctly configured in config/filament-dbview.php:
'model_namespace' => 'App\Models',
Query History:
dbview_queries table). If this table is missing, history won’t persist.php artisan migrate
Performance:
JOIN across large tables) may time out or return slow results.EXPLAIN ANALYZE in the Query Runner to optimize queries:
EXPLAIN ANALYZE SELECT u.*, o.* FROM users u JOIN orders o ON u.id = o.user_id;
Query Runner Errors:
storage/logs/laravel.log) for syntax errors or permission issues.Relationship Previews:
$fillable and $guarded properties are correctly set, and foreign keys are defined in migrations.CSV/JSON Export:
memory_limit in php.ini or use chunking:
-- Example: Export in chunks
SELECT * FROM large_table WHERE id BETWEEN 1 AND 1000;
Custom Query Builder:
QueryRunner class:
namespace App\Services;
use SridharSubramanian\FilamentDbView\QueryRunner;
class CustomQueryRunner extends QueryRunner {
public function customQuery() {
return $this->query("SELECT * FROM users WHERE active = 1");
}
}
$this->app->bind(
SridharSubramanian\FilamentDbView\Contracts\QueryRunner::class,
App\Services\CustomQueryRunner::class
);
UI Customization:
php artisan vendor:publish --tag="filament-dbview-views"
resources/views/vendor/filament-dbview/... to change styles or add buttons.Multi-Tenant Support:
getAvailableModels method:
FilamentDbViewPlugin::make()->modifyAvailableModelsUsing(function (array $models) {
return array_filter($models, fn ($model) => $model::where('tenant_id', auth()->id())->exists());
});
How can I help you explore Laravel packages today?