Laravel 5.1查询多个其他对象的相关对象

时间:2015-10-15 23:49:13

标签: php laravel pagination eloquent

我正在使用Laravel 5.1和lazychaser / laravel-nestedset来创建一个有效的文件夹的父/子树,但我无法弄清楚如何获取文件夹及其后代的相关帖子:

// 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();

现在问题就在于此。当我刚刚获得单个Folder对象的相关帖子时,我这样做了:

// 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对象及其任何后代的Post对象集合,但我无法弄清楚如何使用多个Folder对象完成此操作。

一个解决方案可能是循环遍历Folder对象,创建多个集合,组合它们,然后对它们进行排序,但这似乎不会起作用,因为我正在进行分页,并且分页必须在查询中发生,而不是提一下,根据有多少帖子,这会太慢了。

有没有办法同时获取多个Folder对象的相关Post对象,或者某种方式这样做我还没看到?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用foreach循环:

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

然后你可以收集它们:

$collecttion=collect($posts);