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

同样的一段代码,在本地 Windows 中是生效的,但是在 Linux 环境是无效的排查分析

在生产环境的 Linux 系统中,一直未执行到代码 if ($item->order_number != $newOrderNumber) { } 中去。order_number=17,预期是 order_number=16

作者:

,

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

在生产环境的 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

打印 $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

调整列表的查询方法,以与设置排序时的查询条件保持一致。现在符合预期,排序从 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();


需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理