في هذا الدرس سوف نتعامل مع Payment لذلك بداية سوف نقوم بإنشاء Payment Resource وسوف نقوم بمنع عملية إضافه دفعه جديده من لوحة التحكم وكذلك التعديل على دفعة معينة
php artisan make:filament-resource Payment
بعد إنشاء Resource وبما أننا لا نريد التعديل والإضافه، بالتالي نذهب للملف PaymentResource ومن الدالة getPages نقوم بإزالة create, edit
public static function getPages(): array { return [ 'index' => Pages\ListPayments::route('/'), //'create' => Pages\CreatePayment::route('/create'), //'edit' => Pages\EditPayment::route('/{record}/edit'), ]; }
كذلك حذف او تعديل EditAction و BulkActionGroup من الدالة table
public static function table(Table $table): Table { return $table ->columns([ // ]) ->filters([ // ]) ->actions([ //Tables\Actions\EditAction::make(), ]) ->bulkActions([ //Tables\Actions\BulkActionGroup::make([ //Tables\Actions\DeleteBulkAction::make(), //]), ]); }
وكذلك إضافة الدالتين canCreate و canDeleteAny
public static function canCreate() : bool { return false; } public static function canDeleteAny() : bool { return false; }
وبما أنه لا نريد القيام بالتعديل او انشاء دفعه جديده بالتالي لا داعي لوجود الصفحات الخاصه بها، لذلك سنقوم بحذف هذه الصفحات
Filament/Resources/ProductResource/Pages/EditProduct.php Filament/Resources/ProductResource/Pages/CreateProduct.php
لعرض المدفوعات نحتاج للحقول التالية
created_at, product_name, user_name, user_email, voucher.code, subtotal, taxes, total
لذلك في الدالة table بداخل columns نقوم بإضافة هذه الحقول
public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('created_at')->label('Payment time'), Tables\Columns\TextColumn::make('product.name'), Tables\Columns\TextColumn::make('user.name')->label('User name'), Tables\Columns\TextColumn::make('user.email')->label('User email'), Tables\Columns\TextColumn::make('voucher.code'), Tables\Columns\TextColumn::make('subtotal')->money('usd'), Tables\Columns\TextColumn::make('taxes')->money('usd'), Tables\Columns\TextColumn::make('total')->money('usd'), ]) ->filters([ // ]) ->actions([ //Tables\Actions\EditAction::make(), ]) ->bulkActions([ //Tables\Actions\BulkActionGroup::make([ //Tables\Actions\DeleteBulkAction::make(), //]), ]); }
الأن لو ذهبنا إلى الوحة التحكم إلى payment tab سنرى ما يلي
كما نرى ان user name, user email, product name, voucher code لم تظهر، ويعود ذلك لأننا لم نقوم بتحديد العلاقات في Payment. Model
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Payment extends Model { use HasFactory; protected $fillable = ['product_id', 'user_id', 'voucher_id', 'subtotal', 'taxes', 'total']; public function product(): BelongsTo { return $this->belongsTo(Product::class); } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function voucher(): BelongsTo { return $this->belongsTo(Voucher::class); } }
الأن بعد تحديد العلاقات سيظهر لدينا جميع الحقول