在没有嵌套循环的情况下检索 parent 的项目
retrieve items of a parent without nested loops
我想要一本 collection 所有的书。书属于书店,在书店上,有全球范围。
当我执行:bookstores = BookStore::all() 并将其传递给视图时,我可以执行以下操作:
伪代码:
for each $bookstores as $bookstore
for each $bookstore->books as $book
end
end
例如,我如何按名称对我所有的书进行排序(而不是像示例中那样先按书店然后按书排序)
我不能使用 $books = Books::all(),因为范围在 Bookstore
使用递归函数,可以得到父子关系的层次结构
您可以在抓取时对它们进行排序:
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]
如您所见,这是 'quite' 您可能不想执行的任务。我这样做的方法是创建一个 custom collection 并在其中添加一个方法 books()
。
该方法可能如下所示:
public function books()
{
return $this->pluck('books')->collapse()->sortBy('name');
}
然后您必须确保覆盖 Book
模型和 return 自定义集合中的 newCollection
方法。这也将最终成为您在示例中使用的语法(在下面的评论中)。
我想要一本 collection 所有的书。书属于书店,在书店上,有全球范围。
当我执行:bookstores = BookStore::all() 并将其传递给视图时,我可以执行以下操作: 伪代码:
for each $bookstores as $bookstore
for each $bookstore->books as $book
end
end
例如,我如何按名称对我所有的书进行排序(而不是像示例中那样先按书店然后按书排序)
我不能使用 $books = Books::all(),因为范围在 Bookstore
使用递归函数,可以得到父子关系的层次结构
您可以在抓取时对它们进行排序:
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]
如您所见,这是 'quite' 您可能不想执行的任务。我这样做的方法是创建一个 custom collection 并在其中添加一个方法 books()
。
该方法可能如下所示:
public function books()
{
return $this->pluck('books')->collapse()->sortBy('name');
}
然后您必须确保覆盖 Book
模型和 return 自定义集合中的 newCollection
方法。这也将最终成为您在示例中使用的语法(在下面的评论中)。