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

Laravel下拉列表如何仅展示available状态为1或true的可用员工

问题原因

你之前添加的where('available', 1)条件仅作用于VehicleLog关联查询的日志统计逻辑,并未对下拉列表调用的$staff数据集生效:你当前控制器中是直接用Staff::all()获取全量员工传递给视图,自然会包含可用状态为0的员工。

解决方案

直接修改控制器中$staff的查询逻辑,添加可用状态筛选即可:

// 把原来的 $staff = Staff::all(); 替换为以下代码
$staff = Staff::where('available', 1)->get();

可选优化

1. 兼容历史数据展示

如果存在已提交的历史数据中包含不可用员工的情况,为了避免筛选时选中的历史员工不在下拉列表里、无法正常回显的问题,可以调整查询逻辑:

$staff = Staff::query()
    ->where('available', 1)
    // 如果当前请求有传员工ID,把对应的员工也加入选项,保证回显正常
    ->when(request()->input('smsstaff_key'), function ($query) {
        $query->orWhere('smsstaff_key', request()->input('smsstaff_key'));
    })
    ->get();

2. 复用筛选逻辑

如果项目里多个地方都需要调用可用员工列表,可以给Staff模型添加本地作用域,减少重复代码:
首先在app/Models/Staff.php中添加作用域方法:

public function scopeAvailable($query)
{
    return $query->where('available', 1);
}

之后所有需要获取可用员工的地方都可以直接调用:

$staff = Staff::available()->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:54:04