php - 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');
也许是因为它不是整数?有什么解决办法吗?
解决方案
您可以使用原始查询来获得所需的结果。
$query = "CAST(framesize AS INTEGER) ASC";
DB::table('motor_size')->orderByRaw($query)->get();
但是,更好的方法应该是修改列的数据类型。这样做会:
- 减小桌子的大小。
- 优化包含该列的索引。
- 其他 eloquent 查询也需要上述原始查询,但不建议这样做。
为此,请创建一个新的迁移:
php artisan make:migration AlterFrameSizeInMotorSizeTable
添加以下作为 up 函数定义:
public function up()
{
Schema::table('motor_size', function (Blueprint $table) {
$table->integer('framesize')->change();
});
}
然后使用以下命令运行迁移:
php artisan migrate
推荐阅读
- ios - Swift 弹出所有视图控制器
- javascript - Javascript将不同格式的字符串转换为Json
- jquery - JQuery - 对此相当陌生
- javascript - 从 php 文件中读取视频
- javascript - Animate CC Canvas 导出嵌入角度模板
- java - 寻找定义 javax.activity 的 jar(不再由 java.corba 模块根据 JEP 320 提供)
- regex - 迭代正则表达式捕获的终身问题
- sonarqube - SonarLint for Eclipse 无法绑定项目:只能返回前 10000 个结果
- sapui5 - 使用 CDN 和组件在 sapui5 中设置资源路径
- google-cloud-firestore - Flutter:使用 Firestore 数据进行一些计算