没有不值得去解决的问题,也没有不值得去学习的技术!

Troubleshooting Code That Works on Windows Locally but Fails on Linux

In the production Linux environment, execution never reaches the code block if ($item->order_number != $newOrderNumber) { }. order_number=17, but the expected value is order_number=16

1. Troubleshooting analysis: the same piece of code works locally on Windows but fails in the Linux environment. The code is as follows

PHP

    /**
     * 设置页面元素的排序
     */
    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. In the production Linux environment, execution never reaches the code block if ($item->order_number != $newOrderNumber) { }. order_number=17, but the expected value is order_number=16. See Figure 1

In the production Linux environment, execution never reaches the code block if ($item->order_number != $newOrderNumber) { }. order_number=17, but the expected value is order_number=16
Figure 1

3. Printing $elements yields the following data, which ultimately confirms that there is no issue with this sorting method.

Plaintext
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. Therefore, the problem lies in the interface method used to fetch the field list of page elements.

PHP

    /**
     * 获取页面元素的字段列表
     *
     * @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. Printing $pageElements reveals that the element 1833011727103953 no longer exists in $pageElements. See Figure 2

Printing $pageElements reveals that the element 1833011727103953 no longer exists in $pageElements
Figure 2
Plaintext

    [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. Adjust the list query method so that it matches the query conditions used when setting the sort order. The results now meet expectations: sorting starts at 1, and each subsequent element’s order number increments by 1. See Figure 3

Adjust the list query method so that it matches the query conditions used when setting the sort order. The results now meet expectations: sorting starts at 1, and each subsequent element's order number increments by 1
Figure 3
PHP
        $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();

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系