download countries, teams/player and tournaments for txodds
This commit is contained in:
1 parent
cf37530dd2
commit
356dabb0c1
14 files changed
+294
-17
No files matched your search
+22
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Clusters\DynamicData\Resources\CompetitionGroups\Tables;
|
namespace App\Filament\Clusters\DynamicData\Resources\CompetitionGroups\Tables;
|
||||||
|
|
||||||
|
use App\Filament\Exports\CompetitionGroupExporter;
|
||||||
use App\Models\CompetitionGroupProvider;
|
use App\Models\CompetitionGroupProvider;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
use App\Models\ElementGroup;
|
use App\Models\ElementGroup;
|
||||||
@@ -13,13 +14,17 @@ use Filament\Actions\BulkActionGroup;
|
|||||||
use Filament\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Actions\DeleteBulkAction;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Actions\ExportAction;
|
||||||
|
use Filament\Actions\Exports\Enums\ExportFormat;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\SelectColumn;
|
use Filament\Tables\Columns\SelectColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Enums\FiltersLayout;
|
use Filament\Tables\Enums\FiltersLayout;
|
||||||
use Filament\Tables\Filters\SelectFilter;
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
class CompetitionGroupsTable
|
class CompetitionGroupsTable
|
||||||
{
|
{
|
||||||
@@ -53,6 +58,8 @@ class CompetitionGroupsTable
|
|||||||
])->filters([
|
])->filters([
|
||||||
SelectFilter::make('sport_id')
|
SelectFilter::make('sport_id')
|
||||||
->label('Sport')
|
->label('Sport')
|
||||||
|
->default(1)
|
||||||
|
->selectablePlaceholder(false)
|
||||||
->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id')->toArray()),
|
->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id')->toArray()),
|
||||||
SelectFilter::make('country_id')
|
SelectFilter::make('country_id')
|
||||||
->searchable()
|
->searchable()
|
||||||
@@ -80,6 +87,21 @@ class CompetitionGroupsTable
|
|||||||
])->iconButton()
|
])->iconButton()
|
||||||
->icon('phosphor-dots-three-vertical'),
|
->icon('phosphor-dots-three-vertical'),
|
||||||
])
|
])
|
||||||
|
->headerActions([
|
||||||
|
ExportAction::make()
|
||||||
|
->modalHeading('Download Groups')
|
||||||
|
->label('Export')
|
||||||
|
->icon('phosphor-download')
|
||||||
|
->modalDescription('This will download the TxOdds tournaments with "sport_id" and "country_id" for the sport selected.')
|
||||||
|
->modalIcon('phosphor-microsoft-excel-logo')
|
||||||
|
->exporter(CompetitionGroupExporter::class)
|
||||||
|
->columnMapping(false)
|
||||||
|
->modifyQueryUsing(fn (Builder $query, Get $get) => $query->where('spoirt_id', $get('sport_id')))
|
||||||
|
->formats([
|
||||||
|
ExportFormat::Xlsx,
|
||||||
|
ExportFormat::Csv,
|
||||||
|
]),
|
||||||
|
])
|
||||||
->toolbarActions([
|
->toolbarActions([
|
||||||
BulkActionGroup::make([
|
BulkActionGroup::make([
|
||||||
DeleteBulkAction::make(),
|
DeleteBulkAction::make(),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Clusters\DynamicData\Resources\Elements\Tables;
|
namespace App\Filament\Clusters\DynamicData\Resources\Elements\Tables;
|
||||||
|
|
||||||
|
use App\Filament\Exports\ElementExporter;
|
||||||
use App\Models\CompetitionGroup;
|
use App\Models\CompetitionGroup;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
use App\Models\ElementGroup;
|
use App\Models\ElementGroup;
|
||||||
@@ -13,6 +14,8 @@ use Filament\Actions\BulkActionGroup;
|
|||||||
use Filament\Actions\DeleteAction;
|
use Filament\Actions\DeleteAction;
|
||||||
use Filament\Actions\DeleteBulkAction;
|
use Filament\Actions\DeleteBulkAction;
|
||||||
use Filament\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Actions\ExportAction;
|
||||||
|
use Filament\Actions\Exports\Enums\ExportFormat;
|
||||||
use Filament\Forms\Components\Select;
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Notifications\Notification;
|
use Filament\Notifications\Notification;
|
||||||
use Filament\Schemas\Components\Utilities\Get;
|
use Filament\Schemas\Components\Utilities\Get;
|
||||||
@@ -103,6 +106,21 @@ class ElementsTable
|
|||||||
])->iconButton()
|
])->iconButton()
|
||||||
->icon('phosphor-dots-three-vertical'),
|
->icon('phosphor-dots-three-vertical'),
|
||||||
])
|
])
|
||||||
|
->headerActions([
|
||||||
|
ExportAction::make()
|
||||||
|
->modalHeading('Download Teams/Player')
|
||||||
|
->label('Export')
|
||||||
|
->icon('phosphor-download')
|
||||||
|
->modalDescription('This will download the TxOdds Teams/Player with "sport_id" and "country_id" for the sport selected.')
|
||||||
|
->modalIcon('phosphor-microsoft-excel-logo')
|
||||||
|
->exporter(ElementExporter::class)
|
||||||
|
->columnMapping(false)
|
||||||
|
->modifyQueryUsing(fn (Builder $query, Get $get) => $query->where('spoirt_id', $get('sport_id')))
|
||||||
|
->formats([
|
||||||
|
ExportFormat::Xlsx,
|
||||||
|
ExportFormat::Csv,
|
||||||
|
]),
|
||||||
|
])
|
||||||
->toolbarActions([
|
->toolbarActions([
|
||||||
BulkActionGroup::make([
|
BulkActionGroup::make([
|
||||||
DeleteBulkAction::make(),
|
DeleteBulkAction::make(),
|
||||||
|
|||||||
@@ -3,17 +3,9 @@
|
|||||||
namespace App\Filament\Clusters\StaticData\Resources\Bettypes\Pages;
|
namespace App\Filament\Clusters\StaticData\Resources\Bettypes\Pages;
|
||||||
|
|
||||||
use App\Filament\Clusters\StaticData\Resources\Bettypes\BettypeResource;
|
use App\Filament\Clusters\StaticData\Resources\Bettypes\BettypeResource;
|
||||||
use Filament\Actions\CreateAction;
|
|
||||||
use Filament\Resources\Pages\ListRecords;
|
use Filament\Resources\Pages\ListRecords;
|
||||||
|
|
||||||
class ListBettypes extends ListRecords
|
class ListBettypes extends ListRecords
|
||||||
{
|
{
|
||||||
protected static string $resource = BettypeResource::class;
|
protected static string $resource = BettypeResource::class;
|
||||||
|
|
||||||
protected function getHeaderActions(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
CreateAction::make(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -4,11 +4,14 @@ namespace App\Filament\Clusters\StaticData\Resources\Bettypes\Tables;
|
|||||||
|
|
||||||
use App\Models\Sport;
|
use App\Models\Sport;
|
||||||
use Filament\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Enums\FiltersLayout;
|
use Filament\Tables\Enums\FiltersLayout;
|
||||||
|
use Filament\Tables\Filters\Filter;
|
||||||
use Filament\Tables\Filters\SelectFilter;
|
use Filament\Tables\Filters\SelectFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
class BettypesTable
|
class BettypesTable
|
||||||
{
|
{
|
||||||
@@ -38,11 +41,28 @@ class BettypesTable
|
|||||||
IconColumn::make('q1')->boolean()->trueIcon('phosphor-check-circle-fill')->falseIcon('phosphor-circle')->falseColor('gray'),
|
IconColumn::make('q1')->boolean()->trueIcon('phosphor-check-circle-fill')->falseIcon('phosphor-circle')->falseColor('gray'),
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
SelectFilter::make('sport_id')
|
Filter::make('sport_id')
|
||||||
->label('Sport')
|
->schema([
|
||||||
->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id')
|
Select::make(name: 'sport_id')
|
||||||
->toArray()),
|
->placeholder('Filter Sport')
|
||||||
|
->hiddenLabel()
|
||||||
|
->preload()
|
||||||
|
->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id'))
|
||||||
|
->live(),
|
||||||
|
])
|
||||||
|
->query(function (Builder $query, array $data): Builder {
|
||||||
|
return $query
|
||||||
|
->when(
|
||||||
|
$data['sport_id'],
|
||||||
|
fn (Builder $query, $sport_id) => $query->where('sport_id', $sport_id)
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
// SelectFilter::make('sport_id')
|
||||||
|
// ->label('')
|
||||||
|
// ->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id')
|
||||||
|
// ->toArray()),
|
||||||
], layout: FiltersLayout::AboveContent)
|
], layout: FiltersLayout::AboveContent)
|
||||||
|
->deferFilters(false)
|
||||||
->recordActions([
|
->recordActions([
|
||||||
EditAction::make()->hiddenLabel(),
|
EditAction::make()->hiddenLabel(),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -4,8 +4,11 @@ namespace App\Filament\Clusters\StaticData\Resources\Countries;
|
|||||||
|
|
||||||
use App\Filament\Clusters\StaticData\Resources\Countries\Pages\ManageCountries;
|
use App\Filament\Clusters\StaticData\Resources\Countries\Pages\ManageCountries;
|
||||||
use App\Filament\Clusters\StaticData\StaticDataCluster;
|
use App\Filament\Clusters\StaticData\StaticDataCluster;
|
||||||
|
use App\Filament\Exports\CountryExporter;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
use Filament\Actions\EditAction;
|
use Filament\Actions\EditAction;
|
||||||
|
use Filament\Actions\ExportAction;
|
||||||
|
use Filament\Actions\Exports\Enums\ExportFormat;
|
||||||
use Filament\Forms\Components\TextInput;
|
use Filament\Forms\Components\TextInput;
|
||||||
use Filament\Forms\Components\Toggle;
|
use Filament\Forms\Components\Toggle;
|
||||||
use Filament\Resources\Resource;
|
use Filament\Resources\Resource;
|
||||||
@@ -13,6 +16,7 @@ use Filament\Schemas\Schema;
|
|||||||
use Filament\Support\Enums\IconSize;
|
use Filament\Support\Enums\IconSize;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
|
use Filament\Tables\Enums\FiltersLayout;
|
||||||
use Filament\Tables\Filters\Filter;
|
use Filament\Tables\Filters\Filter;
|
||||||
use Filament\Tables\Filters\TernaryFilter;
|
use Filament\Tables\Filters\TernaryFilter;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
@@ -77,6 +81,22 @@ class CountryResource extends Resource
|
|||||||
Filter::make('icon')
|
Filter::make('icon')
|
||||||
->label('Missing Icons')
|
->label('Missing Icons')
|
||||||
->query(fn (Builder $query): Builder => $query->whereNull('icon')),
|
->query(fn (Builder $query): Builder => $query->whereNull('icon')),
|
||||||
|
], layout: FiltersLayout::AboveContent)
|
||||||
|
->deferFilters(false)
|
||||||
|
->headerActions([
|
||||||
|
ExportAction::make()
|
||||||
|
->modalHeading('Download Countries')
|
||||||
|
->label('Export')
|
||||||
|
->icon('phosphor-download')
|
||||||
|
->modalDescription('This will download the Countries (id, name) from TxOdds.')
|
||||||
|
->modalIcon('phosphor-microsoft-excel-logo')
|
||||||
|
->exporter(CountryExporter::class)
|
||||||
|
->columnMapping(false)
|
||||||
|
->modifyQueryUsing(fn (Builder $query) => $query->where('is_country', true))
|
||||||
|
->formats([
|
||||||
|
ExportFormat::Xlsx,
|
||||||
|
ExportFormat::Csv,
|
||||||
|
]),
|
||||||
])
|
])
|
||||||
->recordActions([
|
->recordActions([
|
||||||
EditAction::make()->hiddenLabel(),
|
EditAction::make()->hiddenLabel(),
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ class TxoddsMarketsTable
|
|||||||
Select::make(name: 'sport_market')
|
Select::make(name: 'sport_market')
|
||||||
->placeholder('Filter Sport')
|
->placeholder('Filter Sport')
|
||||||
->hiddenLabel()
|
->hiddenLabel()
|
||||||
->label('')
|
|
||||||
->preload()
|
->preload()
|
||||||
->options(function () {
|
->options(function () {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Exports;
|
||||||
|
|
||||||
|
use App\Models\CompetitionGroup;
|
||||||
|
use Filament\Actions\Exports\ExportColumn;
|
||||||
|
use Filament\Actions\Exports\Exporter;
|
||||||
|
use Filament\Actions\Exports\Models\Export;
|
||||||
|
use Illuminate\Support\Number;
|
||||||
|
|
||||||
|
class CompetitionGroupExporter extends Exporter
|
||||||
|
{
|
||||||
|
protected static ?string $model = CompetitionGroup::class;
|
||||||
|
|
||||||
|
public static function getColumns(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
ExportColumn::make('id')
|
||||||
|
->label('ID'),
|
||||||
|
ExportColumn::make('name'),
|
||||||
|
ExportColumn::make('level'),
|
||||||
|
ExportColumn::make('sport_id'),
|
||||||
|
ExportColumn::make('country_id'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getCompletedNotificationBody(Export $export): string
|
||||||
|
{
|
||||||
|
$body = 'Your competition group export has completed and '.Number::format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
|
||||||
|
|
||||||
|
if ($failedRowsCount = $export->getFailedRowsCount()) {
|
||||||
|
$body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $body;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Exports;
|
||||||
|
|
||||||
|
use App\Models\Country;
|
||||||
|
use Filament\Actions\Exports\ExportColumn;
|
||||||
|
use Filament\Actions\Exports\Exporter;
|
||||||
|
use Filament\Actions\Exports\Models\Export;
|
||||||
|
use Illuminate\Support\Number;
|
||||||
|
|
||||||
|
class CountryExporter extends Exporter
|
||||||
|
{
|
||||||
|
protected static ?string $model = Country::class;
|
||||||
|
|
||||||
|
public static function getColumns(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
ExportColumn::make('id'),
|
||||||
|
ExportColumn::make('name'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getCompletedNotificationBody(Export $export): string
|
||||||
|
{
|
||||||
|
$body = 'Your countries export has completed and '.Number::format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
|
||||||
|
|
||||||
|
if ($failedRowsCount = $export->getFailedRowsCount()) {
|
||||||
|
$body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $body;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Exports;
|
||||||
|
|
||||||
|
use App\Models\Element;
|
||||||
|
use Filament\Actions\Exports\ExportColumn;
|
||||||
|
use Filament\Actions\Exports\Exporter;
|
||||||
|
use Filament\Actions\Exports\Models\Export;
|
||||||
|
use Illuminate\Support\Number;
|
||||||
|
|
||||||
|
class ElementExporter extends Exporter
|
||||||
|
{
|
||||||
|
protected static ?string $model = Element::class;
|
||||||
|
|
||||||
|
public static function getColumns(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
ExportColumn::make('id')
|
||||||
|
->label('ID'),
|
||||||
|
ExportColumn::make('name'),
|
||||||
|
ExportColumn::make('sport_id'),
|
||||||
|
ExportColumn::make('country_id'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getCompletedNotificationBody(Export $export): string
|
||||||
|
{
|
||||||
|
$body = 'Your element export has completed and '.Number::format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
|
||||||
|
|
||||||
|
if ($failedRowsCount = $export->getFailedRowsCount()) {
|
||||||
|
$body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $body;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,8 +48,8 @@ class AdminPanelProvider extends PanelProvider
|
|||||||
->emailVerification()
|
->emailVerification()
|
||||||
->emailChangeVerification()
|
->emailChangeVerification()
|
||||||
->databaseNotifications()
|
->databaseNotifications()
|
||||||
->sidebarCollapsibleOnDesktop()
|
|
||||||
// ->databaseNotificationsPolling('15s') default is 30
|
// ->databaseNotificationsPolling('15s') default is 30
|
||||||
|
->sidebarCollapsibleOnDesktop()
|
||||||
->profile(isSimple: false)
|
->profile(isSimple: false)
|
||||||
->default()
|
->default()
|
||||||
->globalSearch(false)
|
->globalSearch(false)
|
||||||
|
|||||||
Generated
+3
-3
@@ -13404,12 +13404,12 @@
|
|||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": {},
|
"stability-flags": [],
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": "^8.3"
|
"php": "^8.3"
|
||||||
},
|
},
|
||||||
"platform-dev": {},
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.9.0"
|
"plugin-api-version": "2.6.0"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('imports', function (Blueprint $table): void {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('completed_at')->nullable();
|
||||||
|
$table->string('file_name');
|
||||||
|
$table->string('file_path');
|
||||||
|
$table->string('importer');
|
||||||
|
$table->unsignedInteger('processed_rows')->default(0);
|
||||||
|
$table->unsignedInteger('total_rows');
|
||||||
|
$table->unsignedInteger('successful_rows')->default(0);
|
||||||
|
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('imports');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('exports', function (Blueprint $table): void {
|
||||||
|
$table->id();
|
||||||
|
$table->timestamp('completed_at')->nullable();
|
||||||
|
$table->string('file_disk');
|
||||||
|
$table->string('file_name')->nullable();
|
||||||
|
$table->string('exporter');
|
||||||
|
$table->unsignedInteger('processed_rows')->default(0);
|
||||||
|
$table->unsignedInteger('total_rows');
|
||||||
|
$table->unsignedInteger('successful_rows')->default(0);
|
||||||
|
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('exports');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('failed_import_rows', function (Blueprint $table): void {
|
||||||
|
$table->id();
|
||||||
|
$table->json('data');
|
||||||
|
$table->foreignId('import_id')->constrained()->cascadeOnDelete();
|
||||||
|
$table->text('validation_error')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('failed_import_rows');
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in new issue
Block a user