Browse Source

!225 多选字段存储和编辑时按选择顺序存储及显示
Merge pull request !225 from HID丨emotion/adv_multi_order

Karson 5 years ago
parent
commit
32f256f3fa
1 changed files with 20 additions and 4 deletions
  1. 20 4
      application/common/controller/Backend.php

+ 20 - 4
application/common/controller/Backend.php

@@ -533,11 +533,27 @@ class Backend extends Controller
             if (is_array($adminIds)) {
                 $this->model->where($this->dataLimitField, 'in', $adminIds);
             }
+
             $fields = is_array($this->selectpageFields) ? $this->selectpageFields : ($this->selectpageFields && $this->selectpageFields != '*' ? explode(',', $this->selectpageFields) : []);
-            $datalist = $this->model->where($where)
-                ->order($order)
-                ->page($page, $pagesize)
-                ->select();
+            
+            //如果有primaryvalue,说明当前是初始化传值,按照选择顺序排序
+            if ($primaryvalue !== null) {
+                $primaryvalue = array_unique(is_array($primaryvalue) ? $primaryvalue : explode(',', $primaryvalue));
+                $primaryvalue = implode(',', array_map([$this->model->getConnection(), 'quote'], $primaryvalue));
+                
+                $datalist = $this->model->where($where)
+                                        ->orderRaw("FIELD(`{$primarykey}`, {$primaryvalue})")
+                                        ->page($page, $pagesize)
+                                        ->field($this->selectpageFields)
+                                        ->select();
+            } else {
+                $datalist = $this->model->where($where)
+                                        ->order($order)
+                                        ->page($page, $pagesize)
+                                        ->field($this->selectpageFields)
+                                        ->select();
+            }
+
             foreach ($datalist as $index => $item) {
                 unset($item['password'], $item['salt']);
                 if ($this->selectpageFields == '*') {