同样的一段代码,在本地 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();



近期评论