与子查询的雄辩关系

时间:2018-06-30 14:00:11

标签: laravel eloquent relationship

我在顺从雄辩的关系时遇到问题。它具有一种使用FieldRole模型的嵌套查询,我认为该模型很糟糕。如果我有一个原始查询,则应使用字段角色的联接及其名称作为一个查询来评估它的名称,但是在这里,它正在执行两个可能无法被雄辩的ORM缓存的查询。

class Team extends Model {
    // ...

    public function goalkeepers() {
        return $this->belongsToMany(
            SoccerPlayer::class,
            'team_has_players',
            'id_teams',
            'id_soccer_players'
        )->where(
            'id_field_role',
            FieldRole::where(
                'name',
                'Goalkeeper'
            )
            ->first()
            ->getKey()
        );
    }
}

第二个查询在那里出现

FieldRole::where(
                    'name',
                    'Goalkeeper'
                )
                ->first()
                ->getKey()

有没有一种方法可以使其成为一个查询关系?

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN:

public function goalkeepers() {
    return $this->belongsToMany(
        SoccerPlayer::class,
        'team_has_players',
        'id_teams',
        'id_soccer_players'
    )->join('field_roles', function($join) {
        $join->on('team_has_players.id_field_role', 'field_roles.id')
            ->where('field_roles.name', 'Goalkeeper');
    });
}