11-07-2024, 01:09 PM
Untuk menerapkan logika di mana kolom slug secara otomatis terisi berdasarkan kolom nama_produk, Anda bisa menggunakan model Sequelize dengan hook untuk secara otomatis mengisi slug setiap kali terjadi operasi create atau update.
Contoh implementasinya seperti ini:
Berikut contoh kode lengkapnya:
Contoh implementasinya seperti ini:
- Buat Model Produk dengan kolom nama_produk dan slug.
- Gunakan hook beforeCreate dan beforeUpdate di dalam model untuk mengisi nilai slug sebelum data disimpan.
Berikut contoh kode lengkapnya:
Code:
const { Sequelize, DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize('postgres://user:password@localhost:5432/database_name');
// Helper untuk membuat slug
const generateSlug = (name) => {
return name
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-') // Ganti karakter selain alfanumerik dengan "-"
.replace(/^-+|-+$/g, ''); // Hilangkan "-" di awal atau akhir
};
// Definisikan model Produk
const Produk = sequelize.define('Produk', {
nama_produk: {
type: DataTypes.STRING,
allowNull: false,
},
slug: {
type: DataTypes.STRING,
unique: true,
}
}, {
hooks: {
beforeCreate: (produk) => {
produk.slug = generateSlug(produk.nama_produk);
},
beforeUpdate: (produk) => {
produk.slug = generateSlug(produk.nama_produk);
}
}
});
// Sinkronisasi model ke database
(async () => {
try {
// Contoh penggunaan
const produkBaru = await Produk.create({
nama_produk: 'Produk Baru Contoh',
});
console.log(produkBaru.toJSON());
} catch (error) {
console.error("Error:", error);
}
})();