对集合数组进行排序

Sorting array of collections

我有一个存储 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 不起作用,因为我认为它不适用于集合数组。

这是我拥有的:

但我真的只是希望它成为一个合并的集合,而不是集合中的一个数组。

每个 VideoQuestionTextQuestion 都有一个 order_position 我想作为排序依据的字段。

感谢任何帮助!

首先要收集的是一个 class,其中包含一个元素数组,这些元素具有用于过滤排序的特殊方法,文档:

The Illuminate\Support\Collection class provides a fluent, convenient wrapper for working with arrays of data.

sortBy 方法 returns 排序的集合(它不适用于它拥有的项目):

$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);

这可能是一个替代方案:

$interview = Interview::find(1)->with(['VideoQuestions',
                                       'TextQuestions', 
                                       'UploadQuestions', 
                                       'Questions' => function($query){
                                           $query->orderBy('order_position', 'asc');
                                       }])->get();

定义关系并制作一个 table 问题,其中包含一个 order_position,您可以对其进行排序,而不是每个 table。