在Laravel中排序的集合突然不再在Vue中排序

idfiyjo8  于 2023-08-07  发布在  Vue.js
关注(0)|答案(1)|浏览(97)

在Laravel中,我有一个名为“垃圾”的简单模型,它的迁移看起来像这样:

Schema::create('garbages', function (Blueprint $table) {
    $table->id();
    $table->date('disposal_at');
    $table->timestamps();
});

字符串
在我的Laravel路由器(web.php)中,路由看起来像这样:

Route::get('/garbage', function() {
    $garbages = \App\Models\Garbage::all()
        ->sortBy('disposal_at');

    // dd($garbage);

    return Inertia::render('Grabage', [
        'garbages' => $garbages
    ]);
});


正如你所看到的,我只是得到了我所有的垃圾记录,按'disposal_at'对它们进行排序,并将其传递给Inertia::render
现在我想通过vue在列表中显示所有记录,文件看起来像这样:

<script setup lang="ts">
    interface Garbage {
        id: number,
        disposal_at: string
    }

    const props = defineProps<{
        garbages: Garbage[]
    }>();
</script>

<template>
    <ul>
        <li v-for="garbage in garbages" :key="garbage.id">
            {{ garbage.disposal_at }}
        </li>
    </ul>
</template>


输出如下所示:

  • 2002-08-19
  • 2002-06-05
  • 1995-07-18
  • 1978-12-21
  • 1989-07-12
  • 1975-09-06
  • 2000-03-01
  • 2012-06-04
  • 2022-11-09
  • 2006-04-10

现在我的问题是,虽然我在laravel中通过“disposal_at”对集合进行了排序,但在我通过Inertia::render()将其传递给vue之后,它再次按id排序。
我已经在laravel路由器中通过dd($garbage)显示了值,以查看它是否在那里排序,这给了我按“disposal_at”排序的集合,但在Vue中它不再按“disposal_at”排序。
为什么会发生这种情况,我该如何解决?

vdgimpew

vdgimpew1#

要解决这个问题,您需要在排序后使用values()方法重置键:

$garbages = \App\Models\Garbage::all()
    ->sortBy('disposal_at')
    ->values();

字符串
当你序列化集合并发送到前端时,JS不保证顺序。使用values()可以保持顺序。

相关问题