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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:55:08