【问题标题】:Relationship with Pivot Table Laravel's Eloquent and Inner Loops与数据透视表 Laravel 的 Eloquent 和 Inner Loops 的关系
【发布时间】:2014-05-02 02:29:54
【问题描述】:

好的,有人可以帮我解决这个场景吗?我想使用 Eloquent 中的关系创建一个部门循环和该部门中所有团队的内部循环。一直在谷歌搜索和实验,但无法得到正确的结果。

我的桌子是这样的:

部门

division_id INT PK
division_name VARCHAR
...

团队

team_id INT PK
team_name VARCHAR
...

division_team(数据透视表)

id INT PK
division_id INT FK
team_id INT FK

我的模型是这样的: DivisionTeamPivot

class DivisionTeamPivot extends \Eloquent {
    protected $fillable = [];
    protected $table = 'division_team';

    public function team(){
        return $this->belongsTo('Team');
    }

    public function division(){
        return $this->belongsTo('Division');
    }

部门

class Division extends \Eloquent {

    protected $primaryKey = 'division_id';
    public function teams(){
        return $this->hasMany('Team','division_team','division_id','team_id');
    }

}

团队

class Team extends \Eloquent {

    protected $primaryKey  = 'team_id';
    public function division(){
        return $this->belongsTo('Division','division_team','team_id','division_id');
    }

}

我的控制器有:

$divisions = DivisionTeamPivot::with('Team','Division')->get();

我的观点:

<section class="panel">
            <header class="panel-heading">
               <h5>{{$division->division->division_name}} Division {{$i}}</h5>
            </header>
            <table class="table">
                <thead>
                <tr>
                    <th></th>
                    <th>Team Name</th>
                    <th class="center">Total Points</th>
                    <th class="center">Rank</th>
                </tr>
                </thead>
                <tbody>
                @foreach($division->team as $team)
                <tr>
                    <td width="75"><img src="/img/logos/{{team->team_logo}}" width="50"></td>
                    <td><a href="/teams/details"> {{team->team_name}}</a></td>
                    <td class="center">1,345</td>
                    <td class="center">1</td>
                </tr>
                 @foreach
                </tbody>
            </table>
        </section>

我想要做的是遍历各个部门,然后对这些部门中的团队进行子循环。我在这里看到有人制作了一个数据透视表模型,但是当我使用它时,它会根据数据透视表中的 division_id 表遍历所有相同的分区,但我得到了这个名字。它为每个重复部门创建一个团队。我需要根据他们所在的部门对他们进行分组。实际上,我仍然无法显示团队名称。我也真的希望急切加载能够正常工作,以便获得最有效的查询。谢谢!!

【问题讨论】:

    标签: php laravel-4 eloquent


    【解决方案1】:

    要建立many-to-many 关系,您需要在两个模型(DivisionTeam)中使用belongsToMany 而不是belongsTo,并且您不需要使用另一个模型作为DivisionTeamPivot pivot 表。所以在DivisionTeam使用belongsToMany方法:

    // Division Model
    public function teams(){
        return $this->belongsToMany('Team', 'division_team', 'division_id', 'team_id');
    }
    
    // Team Model
    public function divisions(){
        return $this->belongsToMany('Division', 'division_team', 'team_id', 'division_id');
    }
    

    这样查询:

    $divisions = Division::with('teams')->get();
    return View::make('viewname')->with('dvisions', $divisions);
    

    view 中,嵌套循环可能是这样的:

    @foreach($divisions as $division)
        {{ $division->division_name }}
        @foreach($division->teams as $team)
            {{ ... }}
            {{ $team->team_name }}
        @endforeach
    @endforeach
    

    【讨论】:

    • 工作就像一个魅力!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2017-07-22
    • 2014-08-26
    • 2023-02-05
    • 2023-03-04
    • 2019-01-25
    相关资源
    最近更新 更多