34 lines
1.1 KiB
PHP
34 lines
1.1 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Widgets;
|
|
|
|
use Filament\Tables;
|
|
use Filament\Widgets\TableWidget as BaseWidget;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class TopTenantsByUploads extends BaseWidget
|
|
{
|
|
protected static ?string $heading = 'Top tenants by uploads';
|
|
protected ?string $pollingInterval = '60s';
|
|
|
|
public function table(Tables\Table $table): Tables\Table
|
|
{
|
|
$query = DB::table('photos as p')
|
|
->join('events as e', 'e.id', '=', 'p.event_id')
|
|
->join('tenants as t', 't.id', '=', 'e.tenant_id')
|
|
->selectRaw('t.id as tenant_id, t.name as tenant_name, COUNT(p.id) as uploads')
|
|
->groupBy('t.id', 't.name')
|
|
->orderByDesc('uploads')
|
|
->limit(5);
|
|
|
|
return $table
|
|
->query($query)
|
|
->columns([
|
|
Tables\Columns\TextColumn::make('tenant_id')->label('#')->width('60px'),
|
|
Tables\Columns\TextColumn::make('tenant_name')->label('Tenant')->searchable(),
|
|
Tables\Columns\TextColumn::make('uploads')->label('Uploads')->numeric(),
|
|
])
|
|
->paginated(false);
|
|
}
|
|
}
|