Php 向Laravel 4中嵌套的雄辩关系添加约束

Php 向Laravel 4中嵌套的雄辩关系添加约束,php,laravel-4,constraints,relationship,eloquent,Php,Laravel 4,Constraints,Relationship,Eloquent,我有3个相关表格,如下各节-->年龄组-->团队 我可以得到一份分区列表,列出每个分区内的所有年龄组和团队。目前,它列出了所有部门和年龄组,而不管年龄组中是否存在任何团队 我希望在这个查询中添加约束,这样我只会得到一个包含有团队的年龄组的部分列表。e、 g 将列出包含团队的年龄组的部分 没有任何年龄组的部分将不会被列出 没有任何球队的年龄组不会被列入名单 表列包括: sections: id | name agegroups: id | name | section_id teams

我有3个相关表格,如下各节-->年龄组-->团队

我可以得到一份分区列表,列出每个分区内的所有年龄组和团队。目前,它列出了所有部门和年龄组,而不管年龄组中是否存在任何团队

我希望在这个查询中添加约束,这样我只会得到一个包含有团队的年龄组的部分列表。e、 g

  • 将列出包含团队的年龄组的部分
  • 没有任何年龄组的部分将不会被列出
  • 没有任何球队的年龄组不会被列入名单
表列包括:

sections:   id | name
agegroups:  id | name  | section_id
teams:      id | name  | agegroup_id 
模型定义如下:

class Section extends Eloquent{
  public function agegroup()
  {
      return $this->hasMany('agegroup');
  }
}

class Agegroup extends Eloquent{
  public function section()
  {
        return $this->belongsTo('section');
  }

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

class Team extends Eloquent {
  public function agegroup()
  {
    return $this->belongsTo('agegroup');
  } 
}
(出于测试目的)我的PHP代码(包括用于急切加载的嵌套关系)位于下面的路由闭包中:

Route::get('/', function()
{
    $sections =  Section::with('agegroup.team')->get();

 foreach ($sections  as $section) {
echo "<h2>$section->name </h2><ul>";

foreach ($section->agegroup as $agegroup) {
    echo "<li>$agegroup->name </li><ul>";

    foreach ($agegroup->team as $team) {
    echo "<li> $team->name </li>";
    }
    echo "</ul>";
 }
 echo "</ul>";
}

});
将agegroup()更新为agegroups(),将team()更新为teams(),然后尝试以下操作(代码未测试):



我认为你在这件事上完全错了。你所拥有的大部分东西都是正确的,但试着做一些更干净一点的。Section.php的内部

class Section
...
    public function nestedgroups()
    {
        return $this->hasMany('Agegroup')->has('teams');
    }
然后,您可以使用

$sections = Section::has('nestedgroups')->with('agegroups.teams')->get();
这应该适用于4.1和4.0。如果使用4.1和sqlite进行测试,请确保在has()中转义查询,如下所示:


首先非常感谢,这让我走上了正确的方向。我在allWithAgeGroupsWithTeams()函数中添加了“return$sections”,因为它似乎没有向调用代码返回任何内容。然而,在您的解决方案中,我遇到了一个agegroupsWithTeams()函数的问题,因为它返回了一个错误“Undefined variable:teams”混淆了我现在可以得到一个列表,其中列出了正确的部分(有子项),但是我仍然列出了没有团队的年龄组。非常确定这是由于上面的错误(从不!)抱歉我复制了错误的错误-报告的错误是“Undefined property:Illumb\Database\Eloquent\Collection::$teams”您是否将年龄组方法“team”更新为“teams”?如果不是,我的代码可能不会像我想象的那样工作。如果您已经更新了方法名,我有一个解决方案。您好,是的,我有。我已经粘贴了上面更新的代码,这样你就可以看到我在复制的解决方案中是否有任何“愚蠢”的遗漏!感谢您在这里的努力,我是Laravel的新手,我希望以类似Laravel的方式完成这项工作,而不是求助于任何原始SQL、旧PHP解决方案……;)您好,这是4.0当前版本。我在下面提供的解决方案应该适用于这两种版本,请看一看。
class Section
...
    public function nestedgroups()
    {
        return $this->hasMany('Agegroup')->has('teams');
    }
$sections = Section::has('nestedgroups')->with('agegroups.teams')->get();
...::has('nestedgroups', '>', DB::raw(0))->...