Laravel雄辩 - 合并查询使用关系单一

问题描述 投票:1回答:1

我正在我使用Laravel雄辩来从我的数据库我所有的数据,其中一个项目。

我存储篮球俱乐部,球队和球员在不同的表。现在,我要选择属于该属于俱乐部一队所有篮球运动员。

我创造了Club模型的关系:

public function basketballPlayers()
    {
        return $this->hasManyThrough('App\Models\Basketball\BasketballPlayer','App\Models\Basketball\BasketballTeam','id','team_id');
    }

而在user模型BasketballPlayer关系:

public function user()
    {
        return $this->hasOne('App\User','id','user_id');
    }

现在,当我执行以下命令,DB::getQueryLog()返回3个查询。

Club::findOrFail($club_id)->basketballPlayers()->with('user')->get();

但是,当我不使用关系执行下面的命令,DB::getQueryLog()只返回1查询。

$players = BasketballPlayer::Join('basketball_teams','basketball_teams.id','=','basketball_players.team_id')
            ->join('users','users.id','=','basketball_players.user_id')
            ->where('basketball_teams.club_id','=',$authUser->club_id)
            ->get(['basketball_players.*','users.firstname','users.lastname','basketball_teams.name']);

我不需要从俱乐部和该用户的所有数据(见->get(...)在加入查询)。

是否有可能获得相同的结果就像“长”手册使用更清洁和更简单的雄辩关系的方式加入查询?

谢谢你的帮助!

php laravel eloquent
1个回答
0
投票

您可以使用此with(不是所有用户列为例)读取数据较少

Club::findOrFail($club_id)
    ->basketballPlayers()
    ->with('user:id,firstname,lastname')   // <- here is change
    ->get();

id(和外键)列是很重要的。你应该也能够使嵌套with以下列方式(我写的,从头部代码 - 所以请测试它):

Club::findOrFail($club_id)
    ->with('BasketballPlayer:id,user_id')
    ->with('BasketballPlayer.user:id,firstname,lastname')   
    ->get();
© www.soinside.com 2019 - 2024. All rights reserved.