首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索没有嵌套循环的父项。

检索没有嵌套循环的父项。
EN

Stack Overflow用户
提问于 2016-02-09 03:54:27
回答 2查看 46关注 0票数 0

我想收藏所有的书。书籍属于一家书店,在书店上,有一个全球性的范围。

当我这样做:BookStore= BookStore::all()并将其传递到视图时,我可以这样做:伪代码:

代码语言:javascript
复制
for each $bookstores as $bookstore
   for each $bookstore->books as $book
   end
end

例如,我怎样才能按名字对所有的书进行排序(而不是先按书店排序,然后再按书排序,如示例中所示)

我不能使用$books = Books::all(),因为作用域在书店上

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 04:42:23

您可以在抓取时对它们进行排序:

代码语言:javascript
复制
BookStore::with(['books' => function($query) {
    $query->orderBy('name');
}])-get();

回答你的另一个问题,从下面的评论得到所有的书。你会做这样的事:

代码语言:javascript
复制
$collection->pluck('books')->collapse()->sortBy('name')

pluck('books')基本上从bookStores抓取了所有的书。这会给出这样的结果:

代码语言:javascript
复制
[[book-a, book-c], [book-b]]

collapse()将合并所有嵌套数组,将结果更改为:

代码语言:javascript
复制
[book-a, book-c, book-b]

如您所见,排序再次关闭,若要修复此sortBy('name'),将调用以下内容:

代码语言:javascript
复制
[book-a, book-b, book-c]

正如您所看到的,这是一个“相当”的任务,您可能不想在您的观点中这样做。我这样做的方法是创建一个自定义集合并在其中添加一个books()方法。

该方法可以如下所示:

代码语言:javascript
复制
public function books()
{
    return $this->pluck('books')->collapse()->sortBy('name');
}

然后,您必须确保覆盖newCollection模型中的Book方法,并返回自定义集合。这也将导致您在示例中使用的语法(在下面的注释中)。

票数 2
EN

Stack Overflow用户

发布于 2016-02-09 04:37:19

使用递归函数,可以获得具有父关系和子关系的层次结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35283580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档