【问题标题】:Eloquent relation with subquery与子查询的雄辩关系
【发布时间】:2018-12-09 11:14:50
【问题描述】:

我在简单化以下雄辩的关系时遇到了问题。它有一种使用 FieldRole 模型的嵌套查询,我认为这是一种不好的模式。如果我有一个原始查询,那么应该使用字段角色的连接和它的名称将它评估为一个查询,但这里它正在执行两个查询,这两个查询可能无法被 eloquent 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()

有没有办法让它成为一个查询关系?

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案1】:

    您可以使用 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');
        });
    }
    

    【讨论】:

    • 您能否就答案提供反馈?
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 2021-06-17
    • 2016-07-01
    • 1970-01-01
    • 2019-12-09
    • 2021-05-29
    • 1970-01-01
    • 2016-02-26
    相关资源
    最近更新 更多