php - Laravel Eloquent 顺序按数字数百先而不是最后

标签 php laravel eloquent

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

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

我得到了这个代码:

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

然后在 Blade 中:
@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');

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

最佳答案

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

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

但是,更好的方法应该是修改列的数据类型。这样做将:
  • 减少 table 的大小。
  • 优化包含该列的索引。
  • 其他 eloquent 查询也将需要上述原始查询,不建议这样做。

  • 为此,请创建一个新的迁移:
    php artisan make:migration AlterFrameSizeInMotorSizeTable
    

    添加以下作为 up 函数定义:
    public function up()
    {
        Schema::table('motor_size', function (Blueprint $table) {
            $table->integer('framesize')->change();
        });
    }
    

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

    关于php - Laravel Eloquent 顺序按数字数百先而不是最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029298/

    相关文章:

    php - Laravel 通过嵌套的急切加载关系排序

    javascript - Typeahead.js 不返回任何内容

    laravel - Laravel Homestead Box 的镜子

    php - PayPalHttpConnection.php 第 174 行 : 中的 PayPalConnectionException

    php - Laravel:检测是否加载了嵌套关系

    php - Laravel 对集合的 Eloquent 结果

    php - 使用 $_GET 'Form' 从 ['' 检查 MySQL 连接];和数组

    php - 如何在 php 中计算 10 天后的日期?

    php - 一个请求有多个模型或数据库?

    laravel - 如何限制 whereHas 只匹配 where 条件?