我有一个存储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字段,我想对其进行排序。
任何帮助都是非常感谢的!
发布于 2017-11-21 23:07:06
第一件事是包含一个元素数组的类,该数组具有筛选排序、docs的特殊方法:
照明\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);发布于 2017-11-21 23:15:37
这可能是另一种选择:
$interview = Interview::find(1)->with(['VideoQuestions',
'TextQuestions',
'UploadQuestions',
'Questions' => function($query){
$query->orderBy('order_position', 'asc');
}])->get();定义关系,并生成一个包含order_position的表问题,您可以对其进行排序,而不是每个表。
https://stackoverflow.com/questions/47424142
复制相似问题