<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
coringawc / filament-single-record-resource example snippets
namespace App\Filament\Resources\MyWallets;
use App\Filament\Resources\MyWallets\Pages\EditMyWallet;
use App\Filament\Resources\MyWallets\Pages\ViewMyWallet;
use CoringaWc\FilamentSingleRecordResource\Contracts\SingleRecordResolvableResource;
use CoringaWc\FilamentSingleRecordResource\Traits\HasSingleRecordResource;
use Filament\Resources\Resource;
class MyWalletResource extends Resource implements SingleRecordResolvableResource
{
use HasSingleRecordResource;
public static function getPages(): array
{
return [
'view' => ViewMyWallet::route('/'),
'edit' => EditMyWallet::route('/edit'),
];
}
}
namespace App\Filament\Resources\MyWallets\Pages;
use App\Filament\Resources\MyWallets\MyWalletResource;
use CoringaWc\FilamentSingleRecordResource\Traits\HasSingleRecord;
use Filament\Resources\Pages\ViewRecord;
class ViewMyWallet extends ViewRecord
{
use HasSingleRecord;
protected static string $resource = MyWalletResource::class;
}
namespace App\Filament\Resources\MyWallets\Pages;
use App\Filament\Resources\MyWallets\MyWalletResource;
use CoringaWc\FilamentSingleRecordResource\Traits\HasSingleRecord;
use Filament\Resources\Pages\EditRecord;
class EditMyWallet extends EditRecord
{
use HasSingleRecord;
protected static string $resource = MyWalletResource::class;
}
// App\Models\User
public function wallet(): HasOne
{
return $this->hasOne(Wallet::class);
}
// App\Models\Wallet
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public static function resolveSingleRecordBuilder(Builder $query): Builder
{
return parent::resolveSingleRecordBuilder($query)
->where('active', true);
}
public static function resolveSingleRecord(): ?Model
{
/** @var \App\Models\User|null $user */
$user = filament()->auth()->user();
if ($user === null) {
return null;
}
return $user->wallet()->firstOrCreate([]);
}