首页 > 解决方案 > Laravel 雄辩的顺序由数百个第一个而不是最后一个

问题描述

我遇到了一个小问题(我希望),希望你们中的一个人能帮助我:)

在我的数据库中得到以下值:56、63、75、80、90、100、132

我得到了这个代码:

MotorSize::orderBy('framesize', 'asc')
            ->get();

然后在刀片中:

@foreach($motor_sizes as $motor_size)
    {{ $motor_size->name }}
@endforeach

我希望输出为:56、63、75、80、90、100、132

但输出是:100、132、56、63、75、80、90

为什么会这样,如何解决?我猜它与值的起始整数有关。

与值相关的数据库表:

$table->string('framesize');

也许是因为它不是整数?有什么解决办法吗?

标签: phplaraveleloquent

解决方案


您可以使用原始查询来获得所需的结果。

$query = "CAST(framesize AS INTEGER) ASC";
DB::table('motor_size')->orderByRaw($query)->get();

但是,更好的方法应该是修改列的数据类型。这样做会:

  1. 减小桌子的大小。
  2. 优化包含该列的索引。
  3. 其他 eloquent 查询也需要上述原始查询,但不建议这样做。

为此,请创建一个新的迁移:

php artisan make:migration AlterFrameSizeInMotorSizeTable

添加以下作为 up 函数定义:

public function up()
{
    Schema::table('motor_size', function (Blueprint $table) {
        $table->integer('framesize')->change();
    });
}

然后使用以下命令运行迁移:

php artisan migrate

推荐阅读