You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel Filament 3.0的Court Resource中添加WHERE条件

解决方案

第一步:修正模型关联错误

当前你的模型关联存在逻辑问题,先调整为正确的关联关系:

  1. Court 模型:添加专属关联方法,用于获取当前法院下role_id=4的法官Profile:
// Court.php
public function judge()
{
    // 关联并筛选role_id=4的Profile
    return $this->hasOne(Profile::class)->where('role_id', 4);
}

// 可选:添加获取该法院所有人员的关联
public function profiles()
{
    return $this->hasMany(Profile::class);
}
  1. Profile 模型:修正court和role关联为belongsTo(因为profiles表包含court_id和role_id外键):
// Profile.php
public function court()
{
    return $this->belongsTo(Court::class);
}

public function role()
{
    return $this->belongsTo(Role::class);
}
  1. Role 模型:修正profile关联为hasMany:
// Role.php
public function profiles()
{
    return $this->hasMany(Profile::class);
}

第二步:在Filament Court Resource中显示法官姓名

提供两种实现方式,按需选择:

方式一:使用自定义关联(推荐)

直接调用Court模型中定义的judge关联,在表格列中显示姓名:

// CourtResource.php
return $table
    ->columns([
        Tables\Columns\TextColumn::make('name')
            ->label('Court Name')
            ->searchable(),
        Tables\Columns\TextColumn::make('judge.fullname')
            ->label('Judge')
            ->sortable()
            ->default('无对应法官'), // 无匹配数据时显示默认文本
    ]);

方式二:使用getStateUsing动态获取

如果不想修改模型关联,可直接在列中通过回调筛选数据:

// CourtResource.php
use Illuminate\Database\Eloquent\Builder;

return $table
    ->columns([
        Tables\Columns\TextColumn::make('name')
            ->label('Court Name')
            ->searchable(),
        Tables\Columns\TextColumn::make('judge')
            ->label('Judge')
            ->getStateUsing(function (Court $record) {
                // 从当前法院的人员中筛选role_id=4的记录
                $judge = $record->profiles()->where('role_id', 4)->first();
                return $judge?->fullname ?? '无对应法官';
            })
            // 支持排序功能
            ->sortable(query: function (Builder $query, string $direction) {
                return $query->leftJoin('profiles', 'courts.id', '=', 'profiles.court_id')
                    ->where('profiles.role_id', 4)
                    ->orderBy('profiles.fullname', $direction)
                    ->select('courts.*');
            }),
    ]);

内容的提问来源于stack exchange,提问作者Coder Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:02:39