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
相关产品推荐
相关产品推荐

