Laravel 奇怪的行为 orderByRaw(field())
Laravel weird behavior orderByRaw(field())
我正在创建一个多卷注册系统。我正在尝试列出所有现有的卷。这些必须根据分配给它们的权限数量进行升序排序。 (在这个例子中:用户第一,版主第二,管理员第三)
我无法在代码中定义卷,因为可以创建新卷并删除现有卷。 (用户和管理员角色除外)
我检索了所有可用卷的权限计数,并将它们放在一个数组中,其中包含卷的 ID。
数组per_countreturns以下ids:
2, 4, 3
身份证号:
- 2 = 用户
- 3 = 管理员
- 4 = 版主
但是,当我执行以下查询时:
Roll::orderByRaw("FIELD(id, ?)", array($per_count))->get()
它颠倒了顺序,我得到了
- 3 位管理员
- 4 版主
- 2 位用户
控制器:
public function index()
{
// Check if user is authorized to use this action, else redirect to login page
$this->authorize_action(__FUNCTION__, $this->classname);
foreach (Roll::all() as $roll) {
$rollpermission['id'] = $roll->id;
$rollpermission['count'] = $roll->permissions->count();
$permission[] = $rollpermission;
}
$this->array_sort_by_column($permission, 'count');
$per_count = array();
foreach ($permission as $per) {
$per_count[] = $per['id'];
}
$foo = implode(', ', array_fill(0, count($per_count), '?'));
return view('roll')
->with('roll', Roll::orderByRaw("FIELD(id, " . $foo . ") desc", array_reverse($per_count))->get());
}
我设法让它与 array_reverse 函数一起正常工作。
然而,这是草率的,不应该是必要的。而且我找不到查询反转结果的原因。
有人可以向我解释为什么结果相反吗?谢谢
我正在创建一个多卷注册系统。我正在尝试列出所有现有的卷。这些必须根据分配给它们的权限数量进行升序排序。 (在这个例子中:用户第一,版主第二,管理员第三) 我无法在代码中定义卷,因为可以创建新卷并删除现有卷。 (用户和管理员角色除外)
我检索了所有可用卷的权限计数,并将它们放在一个数组中,其中包含卷的 ID。
数组per_countreturns以下ids:
2, 4, 3
身份证号:
- 2 = 用户
- 3 = 管理员
- 4 = 版主
但是,当我执行以下查询时:
Roll::orderByRaw("FIELD(id, ?)", array($per_count))->get()
它颠倒了顺序,我得到了
- 3 位管理员
- 4 版主
- 2 位用户
控制器:
public function index()
{
// Check if user is authorized to use this action, else redirect to login page
$this->authorize_action(__FUNCTION__, $this->classname);
foreach (Roll::all() as $roll) {
$rollpermission['id'] = $roll->id;
$rollpermission['count'] = $roll->permissions->count();
$permission[] = $rollpermission;
}
$this->array_sort_by_column($permission, 'count');
$per_count = array();
foreach ($permission as $per) {
$per_count[] = $per['id'];
}
$foo = implode(', ', array_fill(0, count($per_count), '?'));
return view('roll')
->with('roll', Roll::orderByRaw("FIELD(id, " . $foo . ") desc", array_reverse($per_count))->get());
}
我设法让它与 array_reverse 函数一起正常工作。 然而,这是草率的,不应该是必要的。而且我找不到查询反转结果的原因。 有人可以向我解释为什么结果相反吗?谢谢