await client.query('BEGIN');
// Ebeveyn kategorinin rgt ve lft değerlerini al
const parentCategoryRows = await client.query(
"SELECT lft, rgt FROM categories WHERE id = $1",
[parentID]
);
if (parentCategoryRows.rowCount === 0) {
console.error('Belirtilen ebeveyn kategori bulunamadı.');
await client.query('ROLLBACK');
return;
}
const parentCategory = parentCategoryRows.rows[0];
const parentRgt = parentCategory.rgt;
// Yeni kategori verilerini hazırla
const newCategory = {
title: category.title,
subtitle: category.subtitle,
parent: parentID,
lft: parentRgt, // Ebeveynin rgt değeri
rgt: parentRgt + 1,
};
// Yeni kategoriyi ekleyin
const insertQuery = "INSERT INTO categories (title, subtitle, parent, lft, rgt) VALUES ($1, $2, $3, $4, $5)";
const insertParams = [newCategory.title, newCategory.subtitle, newCategory.parent, newCategory.lft, newCategory.rgt];
await client.query(insertQuery, insertParams);
let currentParentId = parentID;
while (currentParentId !== 0) {
// Ebeveyn kategorinin rgt değerini güncelle
await client.query(
"UPDATE categories SET rgt = rgt + 2 WHERE id = $1",
[currentParentId]
);
const parentCategoryRows = await client.query(
"SELECT parent FROM categories WHERE id = $1",
[currentParentId]
);
if (parentCategoryRows.rowCount === 0) {
break;
}
currentParentId = parentCategoryRows.rows[0].parent;
}
await client.query('COMMIT');
console.log('Kategori başarıyla oluşturuldu');
Yukarıda ki kodlar ile bir kategori oluşturuyorum ve aşağıda ki görsel de gördüğünüz gibi kısmen başarılı çalışıyor sorun şu örnek veriyorum 1. Ana kategoriye 2 tane alt kategori ekledim ve bunların 1. orta kategorinin lft - rgt değerleri 2-3 oldu 2. Orta kategorinin de lft - rgt değerleri 4-5 oldu ve bu durumda ebeveyn olan Ana kategorini lft - rgt değerleri 1-6 oluyor buraya kadar sorunsuz şimdi ben dedim ki 1. orta kategoriye bir alt kategori daha ekleyim ve ekledim bu durumda 1. Orta kategorinin lft - rgt değeri 2-3 halinden 2-5 haline geldi Bu durumda iki sorun ortaya çıkıyor 1. Ana kategorinin rgt değeri 1-6 olması gerekirken 1-8 oldu çünkü yazdığım koda göre önce ki rgt değeri olan 6 değerine +2 eklemesini söyledim o da ekledi şayet ben 1. Orta kategori yerine 2. orta kategoriye alt kategori ekleseydim onun lft-rgt değerleri 4-5 den 6-7 olacaktı böylece 1. Ana kategorinin güncellemesi doğru olmuş olacaktı ama ben 2. orta kategori yerine ilk eklediğim 1. orta kategoriye alt kategori eklemeyi tercih ettim burada sorunun çözümünü bulamadım yardımlarınızı bekliyorum umarım anlatabilmişimdir.