Cara membuat Sequelize menggunakan nama tabel tunggal


109

Saya memiliki model yang disebut User tetapi Sequelize mencari tabel PENGGUNA setiap kali saya mencoba untuk menyimpan di DB. Adakah yang tahu cara mengatur Sequelize untuk menggunakan nama tabel tunggal? Terima kasih.


3
useradalah kata khusus, Anda akan menemui banyak masalah jika benar-benar mencoba membuat tabel dengan nama itu.
a_horse_with_no_name

1
userbukan kata khusus, tapi kata kunci. Meskipun Anda tidak akan menemui masalah dalam menggunakannya, ada baiknya untuk menghindarinya. dev.mysql.com/doc/refman/5.5/en/keywords.html
Nirmal

Jawaban:


224

The docs menyatakan bahwa Anda dapat menggunakan properti freezeTableName.

Silakan lihat contoh ini:

var Bar = sequelize.define('Bar', { /* bla */ }, {
  // don't add the timestamp attributes (updatedAt, createdAt)
  timestamps: false,

  // don't delete database entries but set the newly added attribute deletedAt
  // to the current date (when deletion was done). paranoid will only work if
  // timestamps are enabled
  paranoid: true,

  // don't use camelcase for automatically added attributes but underscore style
  // so updatedAt will be updated_at
  underscored: true,

  // disable the modification of tablenames; By default, sequelize will automatically
  // transform all passed model names (first parameter of define) into plural.
  // if you don't want that, set the following
  freezeTableName: true,

  // define the table's name
  tableName: 'my_very_custom_table_name'
})

2
Saya telah memperbarui link pada pertanyaan Anda karena rusak, harap Anda tidak keberatan!
Maria Ines Parnisari

1
freezeTableName: truetidak berfungsi di versi terbaru sequelize. Ada solusi lain?
Muhammad Yasir

2
Satu kelemahannya freezeTableNameadalah itu juga mencegah sqlz dari nama tabel dan kolom huruf kecil. Artinya nanti, saat Anda menulis SQL untuk menggali data, Anda harus berurusan dengan nama dengan huruf campuran (apa pun artinya bagi dialek Anda). Pada pg, itu berarti harus menggunakan tanda kutip ganda di setiap nama kasus campuran - yuk! Saya berharap kami dapat memilih keluar dari pluralisasi tetapi tetap melipat kasus ... definememiliki tableNameopsi untuk penggantian eksplisit.
Tom

1
digunakan freezeTableName: truesebagai tambahanmodelName: 'singularName'
Naor Levi

97

Meskipun jawaban yang diterima benar, Anda dapat melakukannya sekali untuk semua tabel daripada harus melakukannya secara terpisah untuk masing-masing tabel. Anda cukup meneruskan objek opsi serupa ke konstruktor Sequelize, seperti ini:

var Sequelize = require('sequelize');

//database wide options
var opts = {
    define: {
        //prevent sequelize from pluralizing table names
        freezeTableName: true
    }
}

var sequelize = new Sequelize('mysql://root:123abc@localhost:3306/mydatabase', opts)

Sekarang ketika Anda menentukan entitas Anda, Anda tidak perlu menentukan freezeTableName: true:

var Project = sequelize.define('Project', {
    title: Sequelize.STRING,
    description: Sequelize.TEXT
})

3
Terima kasih atas perhatiannya, berikut ini tautan ke dokumentasi bagi mereka yang tertarik.
ozanmuyes

0

Jika Anda perlu memiliki nama model yang berbeda untuk definisi singuar dan jamak, Anda dapat memasukkan nama sebagai parameter dalam opsi model.

Silakan lihat contoh ini:

    const People = sequelize.define('people', {
    name: DataTypes.STRING,
}, {
    hooks: {
        beforeCount (options) {
            options.raw = true;
        }
    },
    tableName: 'people',
    name: {
        singular: 'person',
        plural: 'people'
    }
});

ini akan mengembalikan "person" sebagai objek saat satu rekaman dipertanyakan dan "orang" sebagai larik saat kita mengambil beberapa rekaman.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.