同样的一段代码,在本地 Windows 中是生效的,但是在 Linux 环境是无效的排查分析
1、同样的一段代码,在本地 Windows 中是生效的,但是在 Linux 环境是无效的排查分析。代码如下
/** * 设置页面元素的排序 */ public function actionSetSortNumber() { $id = $this->request->post('id'); if (empty($id)) { return [ 'code' => 10001, 'message' => '参数 id 不能为空', ]; } /* @var $element PageElement */ $element = PageElement::find()->where(['id' => $id])->limit(1)->one(); if (!$element) { return [ 'code' => 10404, 'message' => '该页面元素不存在', ]; } $current = $element->order_number; $number = $this->request->post('number'); // 判断是否超出范围 $max = PageElement::find() ->select('MAX(`order_number`)') ->where(['page_id' => $element->page_id]) ->scalar(); if ($number < 1 || $number > $max) { // 这里改成1开始 return [ 'code' => 10405, 'message' => '设置失败,请输入正确的数字', ]; } if ($number === $current) { return [ 'code' => 10406, 'message' => '排序号不能与原排序号相同', ]; } $transaction = \Yii::$app->db->beginTransaction(); try { if ($number < $current) { PageElement::updateAllCounters([ 'order_number' => 1, ], 'page_id = :pageId AND device_type = :deviceType AND order_number >= :min AND order_number < :max', [ ':pageId' => $element->page_id, ':deviceType' => $element->device_type, ':min' => $number, ':max' => $current, ]); } else { PageElement::updateAllCounters([ 'order_number' => -1, ], 'page_id = :pageId AND device_type = :deviceType AND order_number > :min AND order_number <= :max', [ ':pageId' => $element->page_id, ':deviceType' => $element->device_type, ':min' => $current, ':max' => $number, ]); } $element->order_number = $number; $element->updated_at = date('Y-m-d H:i:s'); if (!$element->save(false, ['order_number', 'updated_at'])) { $transaction->rollBack(); return [ 'code' => 10002, 'message' => '数据库操作失败,请联系管理员', ]; } // 统一重新排序,从1开始 $elements = PageElement::find() ->where([ 'page_id' => $element->page_id, 'device_type' => $element->device_type, ]) ->orderBy(['order_number' => SORT_ASC]) ->all(); Yii::info( [ $elements ] ); foreach ($elements as $index => $item) { $newOrderNumber = $index + 1; // 从1开始排序 Yii::info( [ $item->order_number, $newOrderNumber ] ); if ($item->order_number != $newOrderNumber) { $item->order_number = $newOrderNumber; $item->updated_at = date('Y-m-d H:i:s'); if (!$item->save(false, ['order_number', 'updated_at'])) { $transaction->rollBack(); return [ 'code' => 10002, 'message' => '数据库操作失败,请联系管理员', ]; } } } $transaction->commit(); return [ 'code' => 10000, 'message' => '设置页面元素的排序成功', 'data' => $element, ]; } catch (\Exception $e) { $transaction->rollBack(); return [ 'code' => 10003, 'message' => '操作异常:' . $e->getMessage(), ]; } }
2、在生产环境的 Linux 系统中,一直未执行到代码 if ($item->order_number != $newOrderNumber) { } 中去。order_number=17,预期是 order_number=16.如图1
3、打印 $elements,数据如下,最终确认 此排序方法无问题。
Array ( [0] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104376 [element_type_id] => 1028 [page_id] => 1833011727101232 [device_type] => 1 [style] => [] [order_number] => 1 [created_at] => 2025-05-29 22:14:15 [updated_at] => 2025-05-29 22:14:17 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104376 [element_type_id] => 1028 [page_id] => 1833011727101232 [device_type] => 1 [style] => [] [order_number] => 1 [created_at] => 2025-05-29 22:14:15 [updated_at] => 2025-05-29 22:14:17 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [1] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104378 [element_type_id] => 1005 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"2","bg_color":"#79CCFF","gradient_type":"1","angle":"180","start_color":"rgb(199, 234, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 2 [created_at] => 2025-05-29 22:14:34 [updated_at] => 2025-05-29 22:14:35 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104378 [element_type_id] => 1005 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"2","bg_color":"#79CCFF","gradient_type":"1","angle":"180","start_color":"rgb(199, 234, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 2 [created_at] => 2025-05-29 22:14:34 [updated_at] => 2025-05-29 22:14:35 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [2] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727103953 [element_type_id] => 1833011727099549 [page_id] => 1833011727101232 [device_type] => 1 [style] => [order_number] => 3 [created_at] => 2025-05-29 15:55:59 [updated_at] => 2025-05-29 15:55:59 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727103953 [element_type_id] => 1833011727099549 [page_id] => 1833011727101232 [device_type] => 1 [style] => [order_number] => 3 [created_at] => 2025-05-29 15:55:59 [updated_at] => 2025-05-29 15:55:59 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [3] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104395 [element_type_id] => 1024 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"2","bg_color":"#79CCFF","gradient_type":"1","angle":"180","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 4 [created_at] => 2025-05-29 22:17:40 [updated_at] => 2025-05-29 22:17:40 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104395 [element_type_id] => 1024 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"2","bg_color":"#79CCFF","gradient_type":"1","angle":"180","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 4 [created_at] => 2025-05-29 22:17:40 [updated_at] => 2025-05-29 22:17:40 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [4] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104505 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 5 [created_at] => 2025-05-29 22:28:25 [updated_at] => 2025-05-30 16:23:52 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104505 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 5 [created_at] => 2025-05-29 22:28:25 [updated_at] => 2025-05-30 16:23:52 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [5] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104398 [element_type_id] => 1020 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgba(247,251,255,0.39)","end_color":"rgba(247,251,255,0.39)"} [order_number] => 6 [created_at] => 2025-05-29 22:18:35 [updated_at] => 2025-05-29 22:18:35 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104398 [element_type_id] => 1020 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgba(247,251,255,0.39)","end_color":"rgba(247,251,255,0.39)"} [order_number] => 6 [created_at] => 2025-05-29 22:18:35 [updated_at] => 2025-05-29 22:18:35 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [6] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104417 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 7 [created_at] => 2025-05-29 22:20:42 [updated_at] => 2025-05-29 22:20:42 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104417 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 7 [created_at] => 2025-05-29 22:20:42 [updated_at] => 2025-05-29 22:20:42 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [7] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104424 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":"","bg_color_type":"1","bg_color":"rgb(247, 251, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 8 [created_at] => 2025-05-29 22:21:38 [updated_at] => 2025-05-29 22:21:38 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104424 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":"","bg_color_type":"1","bg_color":"rgb(247, 251, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 8 [created_at] => 2025-05-29 22:21:38 [updated_at] => 2025-05-29 22:21:38 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [8] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104448 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 9 [created_at] => 2025-05-29 22:22:55 [updated_at] => 2025-05-29 22:22:55 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104448 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 9 [created_at] => 2025-05-29 22:22:55 [updated_at] => 2025-05-29 22:22:55 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [9] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104455 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 10 [created_at] => 2025-05-29 22:23:30 [updated_at] => 2025-05-29 22:23:30 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104455 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 10 [created_at] => 2025-05-29 22:23:30 [updated_at] => 2025-05-29 22:23:30 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [10] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104462 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 11 [created_at] => 2025-05-29 22:24:20 [updated_at] => 2025-05-29 22:24:20 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104462 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 11 [created_at] => 2025-05-29 22:24:20 [updated_at] => 2025-05-29 22:24:20 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [11] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104469 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 12 [created_at] => 2025-05-29 22:24:47 [updated_at] => 2025-05-29 22:24:47 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104469 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 12 [created_at] => 2025-05-29 22:24:47 [updated_at] => 2025-05-29 22:24:47 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [12] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104475 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 13 [created_at] => 2025-05-29 22:25:27 [updated_at] => 2025-05-29 22:25:27 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104475 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 13 [created_at] => 2025-05-29 22:25:27 [updated_at] => 2025-05-29 22:25:27 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [13] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104483 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":"","bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 14 [created_at] => 2025-05-29 22:26:25 [updated_at] => 2025-05-29 22:26:25 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104483 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":"","bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 14 [created_at] => 2025-05-29 22:26:25 [updated_at] => 2025-05-29 22:26:25 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [14] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104491 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 15 [created_at] => 2025-05-29 22:27:20 [updated_at] => 2025-05-29 22:27:20 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104491 [element_type_id] => 1014 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"rgb(255, 255, 255)","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 15 [created_at] => 2025-05-29 22:27:20 [updated_at] => 2025-05-29 22:27:20 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [15] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104498 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 16 [created_at] => 2025-05-29 22:27:48 [updated_at] => 2025-05-29 22:27:48 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104498 [element_type_id] => 1031 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":""},"bg_color_type":"1","bg_color":"#F7FBFF","gradient_type":"1","angle":"90","start_color":"rgb(255, 255, 255)","end_color":"rgb(255, 255, 255)"} [order_number] => 16 [created_at] => 2025-05-29 22:27:48 [updated_at] => 2025-05-29 22:27:48 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) [16] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104512 [element_type_id] => 1026 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":"/uploads/20250529/68386f6dc4845.png","w":"3840","h":"530","name":"开始会议bg@2x.png","type":"image/png","tmp_name":"/tmp/phpnrHpw4","size":"261824","id":"1833011727104518"},"bg_color_type":"1","bg_color":"rgb(235, 244, 255)","gradient_type":"1","angle":"90","start_color":"rgb(235, 244, 255)","end_color":"rgb(235, 244, 255)"} [order_number] => 17 [created_at] => 2025-05-29 22:29:27 [updated_at] => 2025-05-29 22:29:27 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727104512 [element_type_id] => 1026 [page_id] => 1833011727101232 [device_type] => 1 [style] => {"bg_image":{"path":"/uploads/20250529/68386f6dc4845.png","w":"3840","h":"530","name":"开始会议bg@2x.png","type":"image/png","tmp_name":"/tmp/phpnrHpw4","size":"261824","id":"1833011727104518"},"bg_color_type":"1","bg_color":"rgb(235, 244, 255)","gradient_type":"1","angle":"90","start_color":"rgb(235, 244, 255)","end_color":"rgb(235, 244, 255)"} [order_number] => 17 [created_at] => 2025-05-29 22:29:27 [updated_at] => 2025-05-29 22:29:27 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) ) )
4、那么问题就出在 获取页面元素的字段列表 的接口方法中。
/** * 获取页面元素的字段列表 * * @return array */ public function actionGetElementsByPageId(): array { $pageId = $this->request->post('page_id'); if (empty($pageId)) { return [ 'code' => 10001, 'message' => '参数 page_id 不能为空', ]; } $deviceType = $this->request->post('device_type', PageElementType::DEVICE_TYPE_PC); /* @var $page Page */ $page = Page::find() ->where([ 'id' => $pageId, 'status' => [ Page::STATUS_NORMAL, Page::STATUS_HIDDEN, ], ]) ->limit(1)->one(); if (empty($page)) { return [ 'code' => 10001, 'message' => '该页面不存在', ]; } $pageElements = PageElement::find() ->joinWith(['element_type']) ->with(['element_type.fields']) ->where([ 'page_elements.page_id' => $pageId, 'page_element_types.device_type' => $deviceType ])->orderBy('page_elements.order_number ASC, page_elements.id ASC')->asArray()->all(); $elementIds = array_map(fn($el) => $el['id'], $pageElements); $inputs = PageElementInput::find() ->where(['element_id' => $elementIds]) ->asArray() ->all(); // 构建以 element_id 和 field_id 为索引的值集合 $inputMap = []; foreach ($inputs as $input) { $inputMap[$input['element_id']][$input['field_id']] = $input; } // 给每个字段加上 input foreach ($pageElements as &$element) { $element['style'] = StringHelper::parseIfJson($element['style']); $element['inputs'] = []; $element['slots'] = []; foreach ($element['element_type']['fields'] as &$field) { $fieldId = $field['id']; $fieldName = $field['name']; $fieldType = $field['field_type']; $elementId = $element['id']; $input = $inputMap[$elementId][$fieldId] ?? null; $value = isset($input['value']) ? StringHelper::parseIfJson($input['value']) : null; $style = isset($input['style']) ? StringHelper::parseIfJson($input['style']) : null; if ($fieldType == PageElementFieldType::TYPE_DATA_SOURCE) { // 数据源字段 if (is_array($value) && ($value['type'] ?? '') === 'recommendation_slot') { $alias = $value['value'] ?? ''; if ($alias) { $element['slots'][$fieldName] = RecommendationSlot::getSlotWithContentsByAlias($alias); } } } // 普通字段 $element['inputs'][$fieldName]['value'] = $value; $element['inputs'][$fieldName]['style'] = $style; } $element['inputs'] = !empty($element['inputs']) ? $element['inputs'] : null; $element['slots'] = !empty($element['slots']) ? $element['slots'] : null; } return [ 'code' => 10000, 'message' => '获取页面元素列表成功', 'data' => $pageElements ]; }
5、打印 $pageElements,发现 1833011727103953 元素在 $pageElements 中已经不存在。如图2
[2] => common\models\PageElement Object ( [_attributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727103953 [element_type_id] => 1833011727099549 [page_id] => 1833011727101232 [device_type] => 1 [style] => [order_number] => 3 [created_at] => 2025-05-29 15:55:59 [updated_at] => 2025-05-29 15:55:59 ) [_oldAttributes:yii\db\BaseActiveRecord:private] => Array ( [id] => 1833011727103953 [element_type_id] => 1833011727099549 [page_id] => 1833011727101232 [device_type] => 1 [style] => [order_number] => 3 [created_at] => 2025-05-29 15:55:59 [updated_at] => 2025-05-29 15:55:59 ) [_related:yii\db\BaseActiveRecord:private] => Array ( ) [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array ( ) [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_eventWildcards:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => Array ( ) )
6、调整列表的查询方法,以与设置排序时的查询条件保持一致。现在符合预期,排序从 1 开始,下一个元素的顺序加 1。如图3
$pageElements = PageElement::find() ->joinWith(['element_type']) ->with(['element_type.fields']) ->where([ 'page_elements.page_id' => $pageId, 'page_element_types.device_type' => $deviceType ])->orderBy('page_elements.order_number ASC, page_elements.id ASC')->asArray()->all(); $pageElements = PageElement::find() ->with(['element_type.fields']) ->where([ 'page_id' => $pageId, 'device_type' => $deviceType ])->orderBy('order_number ASC, id ASC')->asArray()->all();
近期评论