繁体   English   中英

Laravel Eloquent-使用关系将查询合并到单个查询

[英]Laravel Eloquent - Combining queries to single one using relations

我正在一个项目中,我正在使用Laravel Eloquent从数据库中获取所有数据。

我将篮球俱乐部,球队和球员存放在不同的桌子中。 现在,我要选择属于某个俱乐部的所有篮球运动员。

我在Club模型中创建了一个关系:

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

还有BasketballPlayer模型中的user关系:

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']);

我不需要俱乐部和用户的所有数据(请参阅Join查询中的->get(...) )。

是否可以使用更简洁,更易懂的口才关系方法来实现与“长篇”手动Join-query中相同的结果?

谢谢你的帮助!

您可以使用with (并非所有用户列作为示例) 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM