2015-10-15 140 views
0

我正在使用Laravel 5.1与lazychaser/laravel-nestedset来创建一个可以工作的父/子树文件夹,但我无法弄清楚如何获取相关文章文件夹及其后代:Laravel 5.1查询多个其他对象的相关对象

// first I get the folder 
$folder = Auth::user()->folders()->where('slug', '=', 'some-slug')->first(); 

// Next I get the descendants, which gives me a 
// collection of Folder objects 
$descendants = $folder->getDescendants(); 

现在是问题所在。当我刚开始在相关的帖子单个文件夹对象,我这样做是这样的:

// Where $folder is a single Folder object 
$posts = $folder->posts()->orderBy('created_at', 'desc')->paginate(100); 

但我需要得到所有后代文件夹中公告()为好,不只是一个。喜欢的东西:

// Where $folders is a collection of Folder objects 
$posts = $folders->posts()->orderBy('created_at', 'desc')->paginate(100); 

我需要得到后的集合对象回到属于最初的文件夹对象和任何它的后代,但我无法弄清楚如何与多个文件夹中对象做到这一点。

一种解决方案可能是循环浏览Folder对象,创建多个集合,将它们合并,然后对它们进行排序,但这似乎不会起作用,因为我正在分页,并且分页必须发生在查询中,更何况,取决于有多少帖子,这会太慢。

有没有一种方法可以同时获得多个Folder对象的相关Post对象,或者有一种方法可以做到这一点我没有看到?

感谢您的帮助。

回答

0

您可以使用foreach循环:

$posts=[]; 
foreach($folders as $folder) 
{ 
    $posts[]=$folder->posts()->orderBy('created_at', 'desc')->paginate(100); 
} 

然后你就可以收集他们:

$collecttion=collect($posts); 
+0

这是我最初尝试,但问题是收集持有2点分页集合,所以我获得两倍的发布数,因为 - >分页(100)单独运行。感谢您的回复,但我需要得到一个分页的集合和循环的文件夹给我多个。 –

+0

@ caleb-jacobo也许你应该在收集它们后分页。 –