সিকুইলাইজ কীভাবে তৈরি করবেন তা একক টেবিলের নাম ব্যবহার করুন


109

ইউজার নামে আমার একটি মডেল রয়েছে তবে সিকুইলাইজ যখনই আমি ডিবিতে সংরক্ষণ করার চেষ্টা করছি তখন সারণী USERS সন্ধান করে। একা একক টেবিলের নাম ব্যবহার করতে কীভাবে সিক্যুইলাইজ সেট করতে হবে তা কি কেউ জানেন? ধন্যবাদ।


3
userএকটি সংরক্ষিত শব্দ, আপনি যদি সত্যই সেই নামটি দিয়ে একটি সারণী তৈরি করার চেষ্টা করেন তবে আপনার প্রচুর সমস্যা হবে।
a_horse_with_no_name

1
userকোনও সংরক্ষিত শব্দ নয়, একটি মূলশব্দ। আপনি এটি ব্যবহার করতে কোনও সমস্যার মুখোমুখি না হলেও এটি এড়ানো ভাল। dev.mysql.com/doc/refman/5.5/en/keywords.html
নির্মল

উত্তর:


224

ডক্স রাষ্ট্রীয় যে আপনি সম্পত্তি ব্যবহার করতে পারেন freezeTableName

এই উদাহরণটি একবার দেখুন:

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
আমি আপনার প্রশ্নের লিঙ্কটি আপডেট করেছি কারণ এটি ভেঙে গেছে, আশা করি আপনার আপত্তি নেই!
মারিয়া ইনেস পরনসারি

1
freezeTableName: trueসিক্যুয়ালাইজের সর্বশেষতম সংস্করণে কাজ করছে না। অন্য কোন সমাধান?
মুহাম্মদ ইয়াসির

2
এর একটি খারাপ দিক freezeTableNameহ'ল এটি বর্গক্ষেত্রকে টেবিল এবং কলামের নামগুলি হ্রাস করতে বাধা দেয়। যার অর্থ হ'ল পরে, যখন আপনি ডেটা সন্ধানের জন্য এসকিউএল হ্যান্ড রাইটিং করেন তখন আপনাকে মিশ্র-মামলার নামগুলি (আপনার উপভাষার জন্য যা কিছু বোঝায়) মোকাবেলা করতে হবে। পিজি-তে, এর অর্থ প্রতিটি মিশ্র-কেস নামের চারপাশে ডাবল-কোট ব্যবহার করা উচিত - ইউক! আমি আশা করি আমরা বহুত্বকরণ থেকে বেরিয়ে যেতে পারি তবে কেস-ভাঁজ ধরে রাখতে পারি ... সুস্পষ্ট ওভাররাইডের বিকল্প defineরয়েছে tableName
টম

1
freezeTableName: trueএর পাশাপাশি ব্যবহার করুনmodelName: 'singularName'
নাওর লেবি

97

গৃহীত উত্তরটি সঠিক হলেও আপনি প্রতিটি টেবিলের জন্য এটি প্রতিটিের জন্য আলাদাভাবে না করে একবার করতে পারেন। আপনি কেবল সিকুইলাইজ কনস্ট্রাক্টরে অনুরূপ অপশন অবজেক্টে পাস করুন, যেমন:

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)

এখন যখন আপনি আপনার সত্ত্বাগুলি সংজ্ঞায়িত করেন, আপনাকে নির্দিষ্ট করতে হবে না freezeTableName: true:

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

3
শীর্ষস্থানীয়দের জন্য ধন্যবাদ, যারা আগ্রহী তাদের ডকুমেন্টেশনের লিঙ্কটি এখানে ।
ওজনমুয়েজ

0

যদি আপনার সিঙ্গুয়ার এবং বহুবচন সংজ্ঞাগুলির জন্য বিভিন্ন মডেলের নাম প্রয়োজন হয় তবে আপনি মডেলের বিকল্পগুলিতে প্যারামিটার হিসাবে নামটি পাস করতে পারেন।

এই উদাহরণটি একবার দেখুন:

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

যখন একটি একক রেকর্ড অনুসন্ধান করা হয় এবং যখন আমরা একাধিক রেকর্ড আনি তখন "ব্যক্তি" একটি বস্তুরূপে ফিরে আসবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.