我想收藏所有的书。书籍属于一家书店,在书店上,有一个全球性的范围。
当我这样做:BookStore= BookStore::all()并将其传递到视图时,我可以这样做:伪代码:
for each $bookstores as $bookstore
for each $bookstore->books as $book
end
end例如,我怎样才能按名字对所有的书进行排序(而不是先按书店排序,然后再按书排序,如示例中所示)
我不能使用$books = Books::all(),因为作用域在书店上
发布于 2016-02-09 04:42:23
您可以在抓取时对它们进行排序:
BookStore::with(['books' => function($query) {
$query->orderBy('name');
}])-get();回答你的另一个问题,从下面的评论得到所有的书。你会做这样的事:
$collection->pluck('books')->collapse()->sortBy('name')pluck('books')基本上从bookStores抓取了所有的书。这会给出这样的结果:
[[book-a, book-c], [book-b]]collapse()将合并所有嵌套数组,将结果更改为:
[book-a, book-c, book-b]如您所见,排序再次关闭,若要修复此sortBy('name'),将调用以下内容:
[book-a, book-b, book-c]正如您所看到的,这是一个“相当”的任务,您可能不想在您的观点中这样做。我这样做的方法是创建一个自定义集合并在其中添加一个books()方法。
该方法可以如下所示:
public function books()
{
return $this->pluck('books')->collapse()->sortBy('name');
}然后,您必须确保覆盖newCollection模型中的Book方法,并返回自定义集合。这也将导致您在示例中使用的语法(在下面的注释中)。
发布于 2016-02-09 04:37:19
使用递归函数,可以获得具有父关系和子关系的层次结构。
https://stackoverflow.com/questions/35283580
复制相似问题