我有一个存储3个合并集合的数组:
public function answer() {
$interview = Interview::find(1);
$videoQuestions = $interview->VideoQuestions()->get();
foreach ($videoQuestions as $vq) {
$vq->type = 'video';
}
$textQuestions = $interview->TextQuestions()->get();
foreach ($textQuestions as $tq) {
$tq->type = 'text';
}
$uploadQuestions = $interview->UploadQuestions()->get();
foreach ($uploadQuestions as $uq) {
$uq->type = 'upload';
}
$questions = collect($videoQuestions);
$questions = $questions->merge($textQuestions);
$questions = $questions->merge($uploadQuestions);
$questions->sortBy('order_position');
dd($questions);
}
- > sortBy无效,因为我认为它不适用于集合数组。
但我真的只是希望它是一个合并的集合而不是集合中的数组。
每个VideoQuestion
或TextQuestion
都有order_position
字段,我想按其排序。
感谢任何帮助!
答案 0 :(得分:2)
第一件事是一个包含元素数组的类,其中包含用于过滤排序的特殊方法,docs:
Illuminate \ Support \ Collection类提供了流畅,方便的功能 用于处理数据数组的包装器。
sortBy方法返回一个已排序的集合(它不适用于它拥有的项目):
$collection = collect([
['name' => 'Desk', 'price' => 200],
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
]);
$sorted = $collection->sortBy('price');
$sorted->values()->all();
/*
[
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
['name' => 'Desk', 'price' => 200],
]
*/
所以你应该有类似的东西:
$questions = $questions->sortBy('order_position');
dd($questions);
答案 1 :(得分:0)
这可能是另一种选择:
$interview = Interview::find(1)->with(['VideoQuestions',
'TextQuestions',
'UploadQuestions',
'Questions' => function($query){
$query->orderBy('order_position', 'asc');
}])->get();
定义关系并创建一个表包含可以排序的order_position而不是每个表的问题。