refactor: 产品分类添加path层级路径逻辑

This commit is contained in:
2025-04-24 14:21:33 +08:00
parent 865193475b
commit 8e7bb8c51a
4 changed files with 22 additions and 17 deletions

View File

@@ -66,20 +66,13 @@ class ProductCategoryValidate extends Validate
if ($value == 0) {
return true;
}
$table_name = (new ProductCategoryModel)->getTable();
$children = Db::query(
preg_replace(
'/\s+/u',
' ',
"WITH RECURSIVE tree_by AS (
SELECT a.id, a.pid FROM $table_name a WHERE a.id = {$data['id']}
UNION ALL
SELECT k.id, k.pid FROM $table_name k INNER JOIN tree_by t ON t.id = k.pid
)
SELECT id FROM tree_by WHERE id <> {$data['id']};"
)
);
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
// 如果pid和id相同返回false
if ($value == $data['id']) {
return false;
}
// 如果pid是id的子分类返回false
$children = ProductCategoryModel::whereRaw('FIND_IN_SET(:id, path)', ['id' => $data['id']])->column('id');
if (!empty($children) && in_array($value, $children)) {
return false;
}