【发布时间】:2017-08-08 20:01:36
【问题描述】:
我正在尝试根据价格(从最低到最高,从最高到最低)对数据库记录(游览)进行排序。我在 db 中添加了 12 条虚拟记录,价格分别为(100 到 1200)。下面是我在控制器中执行排序查询的代码:
public function short(Request $request)
{
if ($request->sortby == "lower") {
$query = Tour::query()->orderBy('price', 'asc');
if (!empty($request->country)) {
$query = $query->whereHas('country', function($r) use($request) {
$r->where('countries.name', $request->country);
});
}
if (!empty($request->category)) {
$query = $query->whereHas('category', function($s) use($request) {
$s->where('categories.name', $request->category);
});
}
if ($request->days !== null) {
$days = $request->days;
$days_explode = explode('|', $days);
$query = $query->whereBetween('days', [$days_explode[0], $days_explode[1]]);
}
$query = $query->get();
}
else{
$query = Tour::query()->orderBy('price', 'desc');
if (!empty($request->country)) {
$query = $query->whereHas('country', function($r) use($request) {
$r->where('countries.name', $request->country);
});
}
if (!empty($request->category)) {
$query = $query->whereHas('category', function($s) use($request) {
$s->where('categories.name', $request->category);
});
}
if ($request->days !== null) {
$days = $request->days;
$days_explode = explode('|', $days);
$query = $query->whereBetween('days', [$days_explode[0], $days_explode[1]]);
}
$query = $query->get();
}
return view('public.tour.search')->withResults($query);
}
When sort by lowest to highest is selected, records are displayed in the following order according to price price column of db table:
100,1000,1100,1200,200,300,400,500,600,700,800,900
and when highest to lowest is selected records are displayed in the following order according to price price column of db table:
900,800,700,600,500,400,300,200,1200,1100,1000,100
谁能帮帮我?
【问题讨论】:
-
在我看来,Laravel 似乎试图将您的数字排序为字符串。您确定这些数字保存在数据库中的
INT列(或任何其他数字类型)中吗?
标签: php mysql laravel sorting laravel-5.4