Laravel 如何从嵌套的Lavel中获取对象?

Laravel 如何从嵌套的Lavel中获取对象?,laravel,laravel-5,eloquent,laravel-5.4,Laravel,Laravel 5,Eloquent,Laravel 5.4,在查询中,我使用嵌套的即时加载: $res = User::where("id", 1)->with("categories.categoryAnn.announcements")->get(); 在该查询的结果中,我得到了嵌套集合: Collection->User->categories->categoryAnn->announcements 如何很快获取最后一个嵌套对象公告?您可以通过以下操作简化它: $categories = User::find

在查询中,我使用嵌套的即时加载:

$res = User::where("id", 1)->with("categories.categoryAnn.announcements")->get();
在该查询的结果中,我得到了嵌套集合:

Collection->User->categories->categoryAnn->announcements

如何很快获取最后一个嵌套对象
公告

您可以通过以下操作简化它:

$categories = User::find(1)->categories()->get(); //loads the categories alone

$announcements = collection([]);

foreach(categories as $category)
{
    $announcements->push($category->categoryAnn->announcements);
}
这里的想法或假设是,对于每个类别,
categoryAnn
是一个,并且可以有一个或多个
公告

关于效率,我真的说不出来,但是是的,这应该行得通


您可以通过以下方式简化它:

$categories = User::find(1)->categories()->get(); //loads the categories alone

$announcements = collection([]);

foreach(categories as $category)
{
    $announcements->push($category->categoryAnn->announcements);
}
这里的想法或假设是,对于每个类别,
categoryAnn
是一个,并且可以有一个或多个
公告

关于效率,我真的说不出来,但是是的,这应该行得通


您可以采用相反的方式,只获得如下通知:

$announcements =  Announcement::whereHas('categoriesAnn', function($q) {
  $q->whereHas('categories, function($q) {
      $q->whereHas('user', function($q) {
          $q->where('id',1);
      });
  });
});

这显然是伪代码,因为我不知道您的关系的确切名称,但类似的东西应该可以工作,并且您不需要在这里使用任何循环。

您可以用相反的方法来获得这样的通知:

$announcements =  Announcement::whereHas('categoriesAnn', function($q) {
  $q->whereHas('categories, function($q) {
      $q->whereHas('user', function($q) {
          $q->where('id',1);
      });
  });
});

这显然是伪代码,因为我不知道您的关系的确切名称,但类似的东西应该可以工作,您不需要任何循环。

因此,为此我需要创建5个嵌套循环,这是非常糟糕的,为此我需要创建5个嵌套循环,这是非常糟糕的我尝试避免额外的循环,我需要使用relations创建这个,这里只使用一个循环,看,这些关系在循环中使用。获取所有采购订单,每个订单有一个产品,对应的产品有许多图片。如果我理解正确,这个描述与你的问题相似。我需要图片和我给出的示例,我能够检索到所有与产品相关的图片。我试图避免额外的循环,我需要使用关系创建此循环。您在这里只使用一个循环,请看,这些关系在循环中使用。获取所有采购订单,每个订单有一个产品,对应的产品有许多图片。如果我理解正确,这个描述与你的问题相似。我需要图片和我给出的例子,我能够检索到所有与产品相关的图片。我会检查,但确切地说,在Laravel制作是如此困难?如果没有雄辩,你会怎么做?在Laravel中,如果您想运行原始查询,也可以运行原始查询;如果您认为这是更好的方法,则可以使用联接。并没有什么能阻止你们这样做。问题很简单,我需要从表异常行中选择一些行,这些行中的类别并没有在类别用户中显示。解决方案也很繁琐。如果您想使用其他评论中提到的关系,可以这样做。如果您想使用原始SQL查询,也可以这样做。这取决于你选择的解决方案。你会检查,但在拉雷维尔确实很难做到?如果没有雄辩,你会怎么做?在Laravel中,如果您想运行原始查询,也可以运行原始查询;如果您认为这是更好的方法,则可以使用联接。并没有什么能阻止你们这样做。问题很简单,我需要从表异常行中选择一些行,这些行中的类别并没有在类别用户中显示。解决方案也很繁琐。如果您想使用其他评论中提到的关系,可以这样做。如果您想使用原始SQL查询,也可以这样做。这取决于您选择的解决方案。