Laravel优雅实现未被选中球员的动态查询方法
Laravel实现指定选秀未选中球员查询函数
基础未选中球员查询逻辑
先获取当前选秀中已被选中的球员ID集合(排除player_id为null的空记录),再查询不在该集合中的球员:
// 在Draft模型中添加基础查询方法 public function getAvailablePlayers() { // 提取已选中的球员ID $selectedPlayerIds = $this->draftPicks() ->whereNotNull('player_id') ->pluck('player_id') ->toArray(); // 查询未被选中的球员 return Player::query() ->whereNotIn('id', $selectedPlayerIds) ->get(); }
扩展动态参数支持
加入三个动态过滤条件的逻辑:
$draftType:传入'rookie'时,仅筛选years_pro = 0的新秀球员,否则返回全量球员$searchString:按球员姓名做模糊匹配$position:按球员位置做精确筛选
更新后的完整方法:
// 在Draft模型中添加带参数的查询方法 public function getAvailablePlayers($draftType = '', $searchString = '', $position = '') { // 获取已选中球员ID集合 $selectedPlayerIds = $this->draftPicks() ->whereNotNull('player_id') ->pluck('player_id') ->toArray(); // 初始化查询构造器 $query = Player::query() ->whereNotIn('id', $selectedPlayerIds); // 新秀过滤逻辑 if ($draftType === 'rookie') { $query->where('years_pro', 0); } // 姓名模糊搜索 if (!empty($searchString)) { $query->where('name', 'like', "%{$searchString}%"); } // 位置精确筛选 if (!empty($position)) { $query->where('position', $position); } return $query->get(); }
使用示例
// 获取某选秀下所有未被选中的球员 $draft = Draft::find($draftId); $availablePlayers = $draft->getAvailablePlayers(); // 获取该选秀下未被选中的、姓名含"James"的前锋(SF)新秀 $filteredPlayers = $draft->getAvailablePlayers('rookie', 'James', 'SF');
内容的提问来源于stack exchange,提问作者BlindException
相关产品推荐
相关产品推荐

