HasMany Relationship: Use withCount in Table

HasMany Relationship: Use withCount in Table

2024-12-16 وقت القراءه : 1 دقائق

لفرض أننا نريد عرض عدد طلبات الشراء ( عمليات الدفع )، التي تمت على code معين.

قبل البدء في التعامل مع Filament فإننا نحتاج لإنشاء Payment Model مع  migration لتسجيل عمليات الدفع

php artisan make:model Payment -m


public function up(): void
{
    Schema::create('payments', function (Blueprint $table) {
        $table->id();
        $table->foreignId('product_id')->constrained();
        $table->foreignId('user_id')->constrained();
        $table->foreignId('voucher_id')->nullable()->constrained();
        $table->integer('subtotal');
        $table->integer('taxes');
        $table->integer('total');
        $table->timestamps();
    });
}

كذلك نحتاج لتحديد العلاقه بين Voucher Model و Payment Model وهي hasMany

class Voucher extends Model
{
    use HasFactory;


    protected $fillable = ['code','product_id','discount_percent'];


    public function product() : BelongsTo
    {
        return $this->belongsTo(Product::class);
    }


    public function payments() : HasMany
    {
        return $this->hasMany(Payment::class);
    }
}


الأن بعد أن إنتهينا من إعدادات الـ Model ، نذهب لملف VoucherResource ونضيف الحقل count

public static function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('code')->label('Voucher Code'),
            Tables\Columns\TextColumn::make('discount_percentage')->label('Discount (%)'),
            Tables\Columns\TextColumn::make('product.name')->label('Name Of Product'),
            Tables\Columns\TextColumn::make('payments_count')
                ->label('Times Used')
                ->counts('payments'),
        ])
        ->filters([
            //
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ])
        ->bulkActions([
            Tables\Actions\BulkActionGroup::make([
                Tables\Actions\DeleteBulkAction::make(),
            ]),
        ]);
}

كما نلاحظ أنه في count تم تحديد العلاقه بين الـ Payment Model , Voucher Model

إضافة تعليق
Loading...