我与3个模特有这种关系
Content (1)
ContentBlocks (many blocks belong to Content)
ContentBlockSettings (many settings belong to ContentBlock)
我需要从DB获取ContentBlocks并对它们进行排序,我有一个名为order的字段,它存储在每个块的ContentBlockSettings中。
如何从数据库中取回ContentBlocks,并按照存储在子关系中的订单字段对它们进行排序。
请不要告诉我将订单字段移到ContentBlocks,我知道这将是最简单的方法,但有非常具体的原因,我不能在我的应用程序中执行此操作。
所以,如果可以通过存储在子关系中的'order'字段订购ContentBlocks,你能告诉我吗?如果可能的话,你能告诉我怎么做吗?
更新
foreach ($content->blocks as $key => $block) {
$title = $block->settings;
foreach ($block->settings as $key => $setting) {
// dump('we here: ' . $setting['key']);
if($setting['key'] == 'order') {
$block->order = (int)$setting['value'];
break;
}
}
}
$content->blocks = $content->blocks->sortBy('order');
return response()->json([
'status' => 'success',
'blocks' => $content->blocks
], 201);
如果我发表评论// $ content-> blocks = $ content-> blocks-> sortBy('order');
返回给客户的是:
注意区别?在第一个图像块是数组,有[在乞讨,如果你仔细观察,并在第二个屏幕没有[,有长度:第一个3,第二个屏幕没有长度
即使认为它们是在服务器上订购的,sortBy('order')也没有改变数组键,所以当我在服务器上dd($ content-> blocks)时,我确定
0 => TitleBlock
2 => HeaderBlock
1 => ImageBlock
这是在dd()时打印的内容,正如您所看到的,ImageBlock仍为1,而HeaderBlock在数组中仍为2。
我如何解决这个问题,以便客户获得正确的订单?
答案 0 :(得分:0)
您可以使用sortBy
收集方法
$collection = collect([
["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]],
["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]],
["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]],
]);
$sorted = $collection->sortBy("product.price")->toArray();
return: [
["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]],
["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]],
["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]],
]