是否可以使用单独的ID数组来订购关系集合,同时仍然通过关系访问?
设置是 Checklist
有很多 ChecklistItems
,我以正常方式访问此关系:
foreach ($list->items as $item) {
// More Code Here
}
现在, $item
的所需顺序作为 $list
属性 $list
下的属性存在,它只是用户所需顺序中的 $item
ID数组,特定于正在迭代的 $list
.
是否有一种可行的方法来根据 $list
模型具有的 item_order
数组来命令 $items
附加 $items
?
(我不能只在'item'表中添加'order'列,b / c顺序根据特定的'list'关系进行更改) .
谢谢你的帮助!
2 回答
您可以尝试设置一个关系,按照您要查找的顺序返回结果 . 您仍然可以急切加载关系,并按指定的顺序生成结果 . 这都是假设
item_order
字段是逗号分隔的ID列表 .或者,如果您不想对表/字段进行硬编码:
现在你可以:
只是警告:这是相当实验性的代码 . 它看起来可以使用我可用的少量测试数据,但我在 生产环境 环境中没有做过这样的事情 . 此外,这仅在HasMany关系上进行测试 . 如果你在BelongsToMany或类似的东西上尝试这个确切的代码,你就会遇到问题 .
你可以这样做:
您还可以向模型添加属性访问器,该属性访问器也是如此
用法:
如果您需要在多个地方使用此类功能,我建议您创建自己的Collection类:
然后,实际使用该类覆盖模型中的
newCollection()
. 在这种情况下,它将在ChecklistItems
类中: