php 如何在Filament管理资源中使用where条件获取结果

yrdbyhpb  于 2022-10-30  发布在  PHP
关注(0)|答案(3)|浏览(341)

我正在使用Laravel灯丝,并为用户模型做了一个资源,工作正常。
我在users表中有一个is_admin字段,它返回0和1。我需要is_admin = 0的用户,但现在,我得到了所有这些用户。
我可以在filament中添加一个where条件来只获取必需的字段吗?

j91ykkif

j91ykkif1#

您可以在getTablequery()中将->where('role', '0')放在return nameModal::query()之后。
就像这样
return nameModal::query()->where('role', '0');

1u4esq0p

1u4esq0p2#

是的,你可以。你可以在相关的资源类中扩展getEloquentQuery()函数。因为你正在讨论用户模型,你可以像下面的代码示例一样将上述函数添加到UserResource.php中。

public static function getEleouentQuery () {
   return User::where('is_admin',0);
}

查看此以了解更多信息

e4yzc0pl

e4yzc0pl3#

回答有点晚了,这里有一个深入的指南。
有两种方法

#1预过滤资源内的查询

在资源内,覆写下列方法:

public static function getEloquentQuery(): Builder
{
    return parent::getEloquentQuery()->where('is_admin', 0);
}

#2全局范围

Filament使用了雄辩的界面,所以应用全局范围也可以完成这项工作。
首先,在App\Models\Scopes\中创建一个全局作用域类(不是必需的路径,只是一个建议):

<?php

namespace App\Models\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class AncientScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('is_admin', 0);
    }
}

然后,修改您的用户模型以应用范围:

<?php

namespace App\Models;

use App\Models\Scopes\AncientScope;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        static::addGlobalScope(new AncientScope);
    }
}

相关问题