Красноречивая связь с подзапросом - PullRequest
0 голосов
/ 30 июня 2018

У меня проблема с простыми следами красноречивых отношений. У него есть своего рода вложенный запрос, в котором используется модель 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 голосов
/ 30 июня 2018

Вы можете использовать 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');
    });
}
...