https://github.com/ozum/sequelize-pg-generator
Auto Create Sequelize ORM Models from PostgreSQL.
https://github.com/ozum/sequelize-pg-generator
Last synced: about 2 months ago
JSON representation
Auto Create Sequelize ORM Models from PostgreSQL.
- Host: GitHub
- URL: https://github.com/ozum/sequelize-pg-generator
- Owner: ozum
- License: mit
- Created: 2015-11-27T14:23:55.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2018-07-05T07:53:26.000Z (almost 7 years ago)
- Last Synced: 2025-03-21T09:35:20.880Z (2 months ago)
- Language: JavaScript
- Homepage:
- Size: 4.9 MB
- Stars: 22
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README-JSDOC-TR.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
README
# Bu modül yerine pg-generator modülünü kullanın. (Daha Yeni & İyi)
pg-generator bu modülün bir sonraki versiyonudur. Çok daha sezgisel, uyarlanabilir ve kolay kullanımlıdır.
Sequelize'den daha fazlasını oluşturabilir. Üstelik Sequelize'ı da daha iyi oluşturur.
pg-generator linkleri:* pg-generator [sequelize sayfası](http://www.pg-generator.com/builtin-templates/sequelize/)
* [npm](https://www.npmjs.com/package/pg-generator)
* [github](https://github.com/ozum/pg-generator)
* [web](http://www.pg-generator.com)Açıklama
--------
Bu modül PostgreSQL veri tabanındann otomatik olarak Sequelize modellerini oluşturur. Veri tabanınızı inceleyerek her bir tablo için ayrı bir model dosyası oluşturur. Varsayılan konfigürasyon ayarları olabildiğince dikkatli seçilmiştir ve doğrudan değişiklik yapmadan kullanıma uygundur. Yine de dilerseniz konfigürasyon aracılığı ile bir çok davranış biçimini değiştirebilirsiniz. Bu doküman varsayılan konfigürasyona göre hazırlanmıştır. Dokümanda ilgili yerlerde konfigürasyon parametreleri ve varsayılan değerleri (Konfigürasyon parametresi:varsayılan değer) şeklinde belirtilmiştir.Kullanım
--------### Adım 1: npm -g komutu ile global olarak kurun.
Bu şekilde modülü ve CLI komutunu kurmuş olursunuz.
$ npm install -g sequelize-pg-generator
### Adım 2: Model dosyalarını oluşturun.
Open terminal, go to your app.js root and create your models automatically into 'model' directory.
$ cd path/to/my/node-app.js
$ spgen -d my_database -u my_user -p my_password### Adım 3: Kendi node.js uygulamanızda modelleri kullanın
Kendi uygulamanızda otomatik olarak oluşturulmuş olan Sequelize modellerini kullanın. Aşağıda örnekler bulabilirsiniz.
var orm = require('./model');
orm.setup('veri_tabanim', 'kullanıcı', 'sifre', {
host: '127.0.0.1',
logging: false,
native: false
});
var sequelize = orm.sequelize;
var contact = orm.model('public.contact'); // Şema kullanmayacak şekilde konfigüre edilebilir.Windows Kullanıcıları
---------------------
Windows işletim sisteminde kurulum yapmak için bazı ipuçları. Bu modül pg modülünü kullanır. Eğer Windows üzerinde pg-native modülünü kullanmak isterseniz aşağıdaki noktalara dikkat ederek kurabilirsiniz:* Python 2 kurulu olmalı. Bu yazı yazılırken Python 3 uyumluluğu yoktu.
* Python'un kurulu olduğu klasörü çevresel değişkenlerden (environment variables) path ve PYTHONPATH içine eklemelisiniz.
* PostgreSQL pg_config ve libpg.dll içeren klasörler'de path içine eklenmiş olmalı. Genellikle PostgreSQL bin ve lib klasörlerini eklemeniz yeterlidir. (Örneğin: C:\Program Files\PostgreSQL\9.3\bin C:\Program Files\PostgreSQL\9.3\lib)
* Visual Studio Build Tools (C:\Program Files (x86)\MSBuild) sisteminizde kurulu olmalı. VS 2012 sonrasında otomatik olarak kurulmaktadır. Eğer bu modülün kurulumu sırasında npm farklı bir Visual Studio sürümü sorarse sizde kurulu versiyonu aşağıdaki gibi kullanabilirsiniz:> npm install -g sequelize-pg-generator --msvs_version=2013
CLI Seçenekleri
---------------
spgen [seçenekler]
-h, --host [host] Veri tabanının IP adresi veya host ismi.
--port [port] Veri tabanına bağlanmak için kullanılacak port
-d, --database [veri tabanı] Veri tabanı ismi
-u, --user [kullanıcı] Veri tabanına bağlanmak için kullanıcı ismi
-p, --password [şifre] Veri tabanına bağlanmak için şifre
-s, --schema [schema] Virgülle ayrılmış veri tabanı şemaları ismi (boşluk olmamalı).
-o, --output [output] Dosyaların üretileceği yer.
-c, --config [config] Konfigürasyon dosyasının yeri.
-t, --templateName Hazır template klasörlerinden verilen isimde olanı kullanılır.
--nolog Log çıktısı yazmayı durdurur.
--resetConfig Konfigürasyonu resetler. (Yan yol. Yayında kullanılması önerilmez.)
--throwError Hatayı konsola yazmak yerine error çıktısı üretir.* Tamamen dokümante edilmiştir. (JSDoc HTML dosyaları doc dizini altındadır.),
* Test edilmiştir,
* Üretilen dosyalar başka bir modül gerektirmez,
* Çoklu PostgreSQL şema (schema) detseği,
* Tekten çoğa (One to many) ilişki desteği (hasMany ve belongsTo),
* Çoktan çoğan (Many to many) ilişki desteği (hasMany through ve belongsToMany),
* Şemalar arası ilişki desteği. (Örneğin public.firma tablosundan ozel_sema.musteri tablosuna),
* Yüksek oranda konfigüre edilebilir,
* Tamamen özelleştirilebilir,
* CLI desteği,
* Model ve ilişkiler için akıllı isimlendirme,
* Otomatik üretilen dosyalara kolayca müdahale,
* Hariç tutulan tablolar,
* Debug,
* Tabloya özel konfigürasyon,
* İsimleri ve alias'leri kontrol ederek çakışmaları önler.UYARI: belongsToMany
----------------------
Sequelize 2.0 RC3 ve öncesi sürümlerde çoktan çoğa (many to many) ilişkiler için belongsToMany özelliği yoktur. Bu versiyondan sonra ise hasMany through ilişkiler ise yayından kalkacaktır (deprecated). Bu konuyla ilgili davranış konfigürasyonla ayarlanabilir. (Config: generate.hasManyThrough:false and generate.belongsToMany:true)Özellikler
----------### Üretilen Dosyalar Başka Modül Gerektirmez
Üretilen dosyalar çekirdek node modülleri ve Sequelize dışında herhangi bir modül gerektirmez.### Çoklu Şema (schema) Detseği
Çoklu PostgreSQL şemalarını destekler. public dışında şemaları da kullanabilirsiniz. Kullanıcı komut satırından veya konfigürasyon dosyasından hangi şemaların işleneceğini seçebilir. Birden fazla şema dahil edilmesi durumunda modeller başına şema isimleri eklenerek ile beraber üretilebilir. (Config: generate.useSchemaName: true, database.schema: ["public"]) Bu sayede değişik şemalardaki aynı isimli tablolarda çakışma yaşanmaz.contact = orm.model('public.kisi'); // kisi tablosu için Sequelize modelini verir.
### Şema Ön Eki Olmadan
Kullanıcı isterse model isimlerine şema ismi eklenmesini durdurabilir.
// Konfigürasyon dosyasında
{...
generate{
useSchemaName: false
}
}
contact = orm.model('kisi'); // kisi tablosu için Sequelize modelini verir.
### Tekten Çoğa (One To Many) İlişki Desteği
Bu modül otomatik olarak tekten çoğa ilişkileri tespit eder ve model.hasMany ve model.belongsTo sequelize ilişkilerini oluşturur.### Çoktan Çoğa (Many To Many) İlişki Desteği
Eğer iki tablo bir ara birleşim tablosu ile bağlıysa, sequelize-pg-generator otomatik olarak bunu tespit eder ve many to many sequelize ilişkisini oluşturur. Eğer bir tabloda birden fazla yabancı anahtar (foreign key) varsa o tablo ara bağlantı tablosu kabul edilir.hasMany hasMany
TABLO: urun ------------< kalem >------------ sepet
ALANLAR: id sepet_id (FK) id
isim urun_id (FK) musteri_id (FK)
renk miktarBu modül belongsToMany ilişkilerini ve hasMany through ilişkilerini otomatik oluşturabilir. Bu yazı tarihi ile Sequelize master dalı hasMany through ilişkilerini kaldırılacak (deprecated) olarak işaretledi. Kullandığınız Sequelize versiyonuna göre istediğiniz ilişki türünün oluşturulmasını konfigürasyondan ayarlayabilirsiniz.
### Şemalar Arası İlişki Desteği
Değişik şemalarda bulunan tablolar arasındaki ilişkileri tespit eder. Örneğin public.firma tablosundan ozel_sema.musteri tablosuna olan ilişki tespit edilebilir.### Yüksek Oranda Konfigüre Edilebilir
sequelize-pg-generator konfigürasyon için [config](https://www.npmjs.com/package/config) mdülünü kullanır. Ayrıca CLI vasıtası ile çağırırken de özel bir konfigürasyon dosyası kullanabilirsiniz. Konfigürasyon parametrelerinin açıklamalarını bu dokümanda aşağıda bulabilirsiniz.### Tamamaen Özelleştirilebilir
sequelize-pg-generator model dosyalarını üretmek için [consolidate](https://www.npmjs.com/package/consolidate) uyumlu template'leri kullanır. Varsayılan template engine olarak [Swig](https://www.npmjs.com/package/swig) kullanılmaktadır. Kullanıcı orjinal template'lere dokunmadan kendi taslaklarının olduğu yeri konfigürasyon aracılığı ile belirterek onların kullanılmasını sağlayabilir. (Config: template.folder and template.engine:'swig') Kendi template'lerini kullanmak isteyenlerin bu modülün template dizinini incelemeri önerilir.Özel template dizininde en azından şu üç dosya bulunmalıdır.
index.ext Varsayılan template dosyası. ext yerine kendi template'lerinizi uzantısını yazın.
index.js Bu dosya üretilen dosyalarla beraber kopyalanır. Amacı üretilen dosyaları kullanmaktır.
utils.js Bu dosya üretilen dosyalarla beraber kopyalanır. Yardımcı fonksiyonlar içerir.### CLI Desteği
Eğer bu modülü önerildiği gibi npm -g ile global olarak kurduysanız spgen komutu model dosyaları üretmek için sisteminizde her yerden kullanılabilir.### İlişki İsimlerini Kolayca Özelleştirebilirsiniz
Eğer otomatik oluşturulan ilişki isimleri sizin için yeterince akıllı değilse, bu isimleri kolayca değiştirebilirsiniz. İlk kullanımdan sonra hedef klasörde `alias.json` isimli bir dosy oluşturulacaktır. Oluşturulan her ilişki ismi bu dosyada mevcuttur. Değiştirmek istediğiniz ismi burada tanımlarsanız, ileride model dosyaları oluşturulurken buradaki isimlere öncelik verilecektir. Bazı isimler sizin için uygunsa değerini null olarak bırakın.### Model ve İlişkiler İçin Akıllı İsimlendirme
sequelize-pg-generator model isimlendirmesi için tablo veya şema.tablo isimlendirmesini kullanır. İlişkiler için yabancı anahtar isimlerini ve veri tabanında tanımlı ilişki isimlerini kullanır. (Veri tabanında ilişkileri düzgün isimlendiriyorsunuz değil mi?) Konfigürasyondan ayarlanarak camel case (tabloAdi) veya dokunulmamış (tablo_adi) şekilde isimlendirilmiş metodlar kullanılabilir. İsimlendirme teamülleri Sequelize modülü tavsiyelerine göre ayarlanmıştır ve 'as' parametresine atama yapılarak isimlendirme yapılır.product_cart_line_items cart_cart_line_items
TABLO: product -------------------------< line_item >--------------------- cart
ALANLAR: id cart_id (FK) id
name product (FK) customer_id (FK)
color quantityDİKKAT: line_item.cart_id alanı _id son eki içermesine rağmen line_item.product _id son eki içermemektedir. Bu tutarsız gibi gözüken durum kasten bu örnek için yapılmıştır.
Nesne Tipi İsimlendirme Kuralı
---------- -------------------
Model tabloAdi veya schema.tabloAdi
hasMany Veri tabanındaki ilişki adının çoğulu. Baştaki tablo adı otomatik silinebilir.
(Config: generate.stripFirstTableFromHasMany:true)
belongsTo Yabancı anahtarın tekil hali. Eğer dış anahtar ismi _id iel bitiyorsa silinir. Aksi durumda
alan ismi ile çakışmaması için başına 'related' ön eki eklenir.
(Config: generate.prefixForBelongsTo:'related')
belongsToMany Birleşim tablosu adı + birleşim tablosundaki diğer tabloya işaret eden yabancı anahtarın çoğul hali.
hasMany({through:..}) Birleşim tablosu adı + birleşim tablosundaki diğer tabloya işaret eden yabancı anahtarın çoğul hali. (Sequelize'de kaldırılacak)Örnek yapı için sonuçlar:
İlişki as Detaylar
------ -- --------
product.hasMany as:'cartLineItems' (Çoğul) 'product' tablo ismi 'product_cart_line_items' ilişki
isminin başından silinmiştir.
product.belongsToMany as:'cartLineItemCarts' (Çoğul) _id eki 'cart_id' yabancı anahtar isminin sonundan
silinmiştir ve başına ilişki adı başındaki tablo adı olmadan eklenmiştir.
product.hasMany Through as:'cartLineItemCarts' (Çoğul) _id eki 'cart_id' yabancı anahtar isminin sonundan
silinmiştir ve başına ilişki adı başındaki tablo adı olmadan eklenmiştir.
cart.hasMany as:'cartLineItems' (Çoğul) 'cart' tablo ismi 'cart_cart_line_items' ilişki
isminin başından silinmiştir.
cart.belongsToMany as:'relatedCartLineItemProducts' (Çoğul) _id eki olmadığından 'related' ön eki ve başına ilişki adı
başındaki tablo adı olmadan eklenmiştir.
cart.hasMany Through as:'relatedCartLineItemProducts' (Çoğul) _id eki olmadığından 'related' ön eki ve başına ilişki adı
başındaki tablo adı olmadan eklenmiştir.
lineItem.belongsTo as:'relatedProduct' (Tekil) _id eki olmadığından 'related' ön eki eklenmiştir.
lineItem.belongsTo as:'cart' (Tekil) _id eki 'cart_id' yabancı anahtar isminin sonundan silinmiştir.Bir çok özellik gibi, oluşturulan dosyalara yıkıcı olmayan bir şekilde aşağıda açıklandığı şekilde müdahale edebilirsiniz.
### Otomatik Üretilen Dosyalara Kolayca Müdahale
Varsayılan olarak otomatik oluşturulan dosyalar path/to/model/definition-files dizininde tutulur. Ayrıca burada 'definition-files-custom' isimli bir dizin de oluşturulur. Kullanıcılar 'definition-files-custom' dizininde model dosyaları ile aynı isimde dosyalar oluşturarak orjinal dosyaların içeriğini değiştirebilir ve gerekli müdahaleleri güvenli bir şekilde yapabilirler. Bu modifikasyonları daha da kolay hale getirmek için utils isimli bir modül de model dizininde oluşturulur.Bu modifikasyonlar yıkıcı değildir, çünkü bu dosyalar orjinal dosyadan miras alarak (inherit) orjinal dosyaya dokunulmadan değişiklik yapma şansı tanırlar. Varsayılan index.js dosyası miras alan bu dosya mevcut ise orjinal dosyayı çağırmaz ve miras alan dosyayı kullanır. Burada dikkat edilmesi gereken bu müdahalelerin henüz Sequelize nesnesi oluşturulmadan önce yapılıyor olmasıdır.
Örneğin cart isimli tablo için 'definition-files/cart.js' dosyası oluşturulur. Kullanıcı 'definition-files-custom/cart.js' isimli bir dosya oluşturarak aşağıdaki örnekte olduğu gibi istediği özelliklere müdahale edebilir. Tüm özellikler için otomatik oluşturulmuş dosyaların içine bakabilirsiniz.
"use strict";
var orm = require('../index.js'),
model = require('../definition-files/public_cart.js'),
util = require('../utils.js')(model),
Seq = orm.Sequelize();module.exports = model;
util.getAttribute('id').validate = {... Some Sequelize Validations}; // Sequelize validation ekleyin.
util.getRelation('relatedProducts').details.as = 'soldItems'; // Varsayılan ilişki ismini beğenmediniz mi? Değiştirin.
util.renameAttribute('customerId', 'clientId'); // Alanın ismini değiştirin.### Hariç Tutulan Tablolar
Bazı tabloların otomatik üretimin dışında bırakılması mümkündür. Konfigürasyonda (Config generate.skipTable:[]) dizisi hariç bırakılacak tabloları tanımlamak için kullanılır. sequelize-pg-generator bu tabloları ve ayrıca bu tablolara olan ve bu tablolardan başka tablolara olan ilişkileri oluşturmaz.
### Debug
Sizin yazdığınız uygulamadan ilk çağrılıp çalıştırıldığında, varsayılan index.js dosyası model dizininde debug.js isimli bir dosya oluşturur. Bu dosya incelenerek index.js'nin ne tip bir kod kullandığı anlaşılabilir. index.js dosyası yerine doğrudan modeller kullanılmak istenseydi bu şekilde bir kod kullanılıyor olacaktı. Ancak bu tip statik bir dosya kullanılsaydı, yıkıcı olmayan bir şekilde müdahalelere izin vermek çok zor olacaktı.
### İsim çakışmalarını önler
sequelize-pg-generator isim çakışmalarını önlemek için aynı tabloda aynı isim/alias sahibi başka bir alan veya ilişki var mı kontrol eder. Varsa uyarır.### Tabloya Özel Konfigürasyon
Bazı tablolar için diğer tablolardan farklı olarak özel kurallar tanımlamak gerekebilir. Bu gibi durumlarda konfigürasyon tablo seviyesinde özel değişikliklere izin verir. Tüm 'generate' ve 'tableOptions' başlığı altında toplanan konfigürasyon parametreleri 'generateOverride' and 'tableOptionsOverride' başlıkları ile tabloya özel olarak değiştirilebilir.
Aşağıdaki örnekte contact tablosunun kendine özgü konfigürasyonlara sahip olması gösterilmiştir.
"generate": {
"columnDescription": true,
"tableDescription": true,
...
},
"generateOverride": {
"contact": {
"tableDescription": false
}
},
"tableOptions": {
"timestamps": false,
"camelCase": true,
"paranoid": false,
...
},
"tableOptionsOverride": {
"contact": {
"paranoid": true
}
}
...Konfigürasyon
=============
Konfigürasyon parametreleri ve varsayılan değerleri aşağıda açıklanmıştır. Konfigürasyon "sequelize-pg-generator" anahtarı altında toplanmıştır, çünkü sequelize-pg-generator konfigürasyonunuzu kendi uygulamanız içerisindeki konfigürasyon ile birleştirmek isteyebilirsiniz. Bu seyede sequelize-pg-generator konfigürasyon ayarlarının isimleri sizin konfigürasyonunuzla çakışmaz. [config](https://www.npmjs.com/package/node-config) buna izin vermektedir.
database
host
string
Veri tabanının IP adresi veya host ismi.
port
number
Veri tabanına bağlanmak için kullanılacak port.
database
string
Veri tabanı ismi.
user
string
Veri tabanına bağlanmak için kullanıcı ismi.
password
string
Veri tabanına bağlanmak için şifre.
schema
Array(string)
Otomatik dosyaların üretileceği veri tabanı şemaları ismi.
template
engine
string
Dosyaları üretmek için kullanılacak olan template engine. [consolidate](https://www.npmjs.com/package/consolidate) uyumlu tüm engine'ler kullanılabilir.
extension
string
Template dosyalarının dosya uzantısı.
folder
string
Template dosyalarının yer aldığı dizin.
output
log
boolean
Otomatik dosyaları üretirken log çıktısı üret.
folder
string
Dosyaların üretileceği yer.
beautify
boolean
Dosyaları [js-beautifier](http://jsbeautifier.org) kullanarak formatla.
indent
number
Üretilen dosyalarda her bir tab karakteri için kaç boşluk kullanılacağı.
preserveNewLine
boolean
Üretilen dosyada taslaklardan gelen yeni satır (new line) karakterlerini koru.
warning
boolean
Eğer true olarak ayarlanırsa otomatik dosyalara ilgili dosyaya nasıl müdahale edileceğini anlatan bir yorum (comment) eklenir.
generate
stripFirstTableFromHasMany
boolean
Eğer true olrak ayarlanırsa has many ilişkilerinde ilişkinin isminde eğer varsa ilk baştaki tablo adı silinir. Örneğin: "product" tablosu için "product_cart_line_items" ilişki ismi "cart_line_items" olarak isimlendirilir.
addTableNameToManyToMany
boolean
Eğer true olarak ayarlanırsa çoktan çoğa olan ilişkilerde (many to many) ilişkinin ismi'nin (as parametresi) başına birleşim tablosunun ismi eklenir. Bu isim çakışmalarını önlemekte yardımcı olur.
addRelationNameToManyToMany
boolean
Eğer true olarak ayarlanırsa çoktan çoğa olan ilişkilerde (many to many) ilişkinin ismi'nin (as parametresi) başına ilişki ismi eklenir. Bu isim çakışmasını addTableNameToManyToMany seçeneğine göre daha iyi önler, çünkü aynı birleşim tablosuna ikiden fazla tablo bağlı olabilir.
stripFirstTableNameFromManyToMany
boolean
Eğer true olrak ayarlanırsa çoktan çoğa (many to many) ilişkilerinde ilişkinin isminde eğer varsa ilk baştaki tablo adı silinir. Örneğin: "product" tablosu için "product_cart_line_items" ilişki ismi "cart_line_items" olarak isimlendirilir.
hasManyThrough
boolean
Has many through ilişkileri hasMany(modelName, { through: '..' } şeklinde yapılandırılır. Sequelize version 2.0 RC3 ve sonrasında has many through ilişkileri kaldırılacak (DEPRECATED) olarak işaretlenmiştir. Bu versiyondan sonra has many through yerine belongToMany kullanmalısınız. hasManyThrough ve belongsToMany aynı tabloda aynı anda true olamaz.
belongsToMany
boolean
belongsToMany ilişkileri kullanılır. Bu ilişki türü Sequelize version 2.0 RC4 ve sonrasında gelmiştir. Önceki Sequelize versiyonları bu ayar true iken çalışmazlar. hasManyThrough ve belongsToMany aynı tabloda aynı anda true olamaz.
prefixForBelongsTo
string
belongsTo ilişkileri yabancı anahtar isminden "_id" eki atılarak isimlendirilir. Eğer yabancı anahtar "_id" eki içermiyorsa belongsTo ilişkilerinin alan isimleri ile karışmasını önlemek için başına bu ayarda belirtilen ön ek eklenir. "Model ve İlişkiler İçin Akıllı İsimlendirme" bölümüne bakabilirsiniz.
useSchemaName
boolean
Eğer true olarak ayarlanırsa oluşturulan dosya isimlerinin ve model isimlerinin başına model isimleri eklenir. Bu ayar çoklu şema kullanan veri tabanlarında değişik şemalarda aynı isimdeki tabloların çakışmasını önlemek için kullanılır.
modelCamelCase
boolean
Şema isimlerinde camel case (schemaName gibi) kullanılmasını sağlar.
relationAccessorCamelCase
boolean
İlişki accessor metodlarında camel case (relationName gibi) kullanılmasını sağlar.
columnAccessorCamelCase
boolean
Alan accessor metodlarında camel case (alanAdi gibi) kullanılmasını sağlar.
columnDefault
boolean
Veri tabanı alanlarındaki varsayılan değerlerin Sequelize modelinde de oluşturulmasını sağlar. UYARI: SQL fonksiyonları henüz desteklenmemektedir. Sequelize'nin istediği şekilde bunları oluşturmak zordur. Bu nedenle bu işin veri tabanı sisteminde halledilmesi daha doğru olacaktır. Öte yandan bu değeri true yapıp, hatalı alanları müdahale ederek değiştirebilirsiniz.
columnDescription
boolean
Alan açıklamalarını oluşturulan modele ekle.
columnAutoIncrement
boolean
Otomatik artırım (auto increment) alanlarının modelde işaretlenmesini sağla.
tableDescription
boolean
Tablo açıklamalarını oluşturulan modele ekle.
dataTypeVariable
string
Sequelize veri tiplerini tanımlamak için nesneye bağlı "Sequelize.BOOLEAN" gibi bir değişken kullanır.This ayar bu değişkenin isminin ayarlanmasını sağlar.
skipTable
Array(string)
Hariç tutulan tabloların listesi.
tableOptions
Kullanıcı buraya istediği Sequelize.define opsiyonlarını (options) ekleyebilir. Bu opsiyonlar doğrudan Sequelize.define metoduna iletilir. Opsiyonlar için Sequelize dokümantasyonu incelenebilir. Bazı örnekler:
timestamps
boolean
createdAt ve updatedAt zaman damgası alanlarını modele ekler.
Varsayılan Konfigürasyon Ayarları
---------------------------------
Varsayılan konfigürasyon ayarları aşağıda listelenmiştir.module.exports = {
"sequelize-pg-generator": {
"database": {
"host": "127.0.0.1",
"port": 5432,
"user": "user",
"password": "password",
"database": "",
"schema": ["public"]
},
"template": {
"engine": "swig",
"extension": "html",
"folder": path.join(__dirname, '..', 'template')
},
"output": {
"log": true,
"folder": "./model",
"beautify": true,
"indent": 4,
"preserveNewLines": false,
"warning": true
},
"generate": {
"stripFirstTableFromHasMany": true,
"addTableNameToManyToMany": false,
"addRelationNameToManyToMany": true,
"stripFirstTableNameFromManyToMany": true,
"hasManyThrough": false,
"belongsToMany": true,
"prefixForBelongsTo": "related",
"useSchemaName": true,
"modelCamelCase": true,
"relationAccessorCamelCase": true,
"columnAccessorCamelCase": true,
"columnDefault": false,
"columnDescription": true,
"columnAutoIncrement": true,
"tableDescription": true,
"dataTypeVariable": "Seq",
"skipTable": []
},
"tableOptions": {
"timestamps": false
}
}
};DİKKAT: Konfigürasyonun Singleton Davranışı
-------------------------------------------
Bu modül konfigürasyon için require('config') komutu ile config modülünü kullanır. Config modülü bu yazının yazıldığı sırada singleton yapısındaydı. Bu nedenle yapılan her çağrıya aynı nesneyi döndürüyordu. Sonuç olarak sonraki çağrılarda konfigürasyon dosyası değiştirilse ya da sequelize-pg-generator constructor çağrılırken başka bir konfigürasyon dosyası gösterilse bile ilk konfigürasyon dönüyor.Normal kullanımda bu herhangi bir sorun teşkil etmez, çünkü sequelize-pg-generator aynı proses içinde genellikle sadece bir kere çağrılır. Ancak bu davranış test etmeyi engellemektedir. Kullanıcı da herhangi bir nedenle bu davranıştan kaçınmak isteyebilir. Bunu aşmak için, yan yol kullanan "resetConfig" isimli bir opsiyon eklenmiştir. Eğer bu seçenek true olarak ayarlanırsa konfigürasyon resetlenir ve yeniden okunur. Bunu yapabilmek için sequelize-pg-generator config modülünü node cache'den siler. lorenwest tarafından github hatalar bölümünde tavsiye edilen bu ara çözüm düşük verimde bir yöntemdir.
Bunu aktive etmek için resetConfig ayarını true olarak vermeniz veya cli'den çağırırken --resetConfig eklemeniz yeterlidir.
var generator = require('sequelize-pg-generator');
generator(function (err) {
if (err) { callback(err); }
}, {
database: 'my_database',
resetConfig: true
);sequelize-pg-creator aşağıdaki kodu kullanır:
global.NODE_CONFIG = null;
delete require.cache[require.resolve('config')];
config = require('config');Template Değişkenleri (Template'leri Özelleştirme)
==================================================
Özel template'ler oluşturmak için kullanıcı varsayılan template dizinini kopyalayabilir veya sıfırdan kendisi oluşturarak "template.folder" konfigürasyon ayarını yeni kullanılacak olan dizini gösterecek şekilde ayarlar. 3 dosya gereklidir: index.ext (.ext kullandığınız template engine'in kullandığı dosya uzantısıdır), index.js, utils.js.index.js ve utils.js dosyaları doğrudan hedef dizine kopyalanır. index.ext template ise model dosyalarını üretmek için her tablo için çağrılır.
Template içerisinde kullanılacak olan değişkenler ve açıklamaları aşağıda verilmiştir. Eğer bir değer tanımlanmamışsa (undefined ise), o değerin key'i üretilen dosyalara hiç yazılmayacaktır.
mainScript
Hedef dizinde üretilen index.js dosyasının patikası.
warning
Bu değişken konfigürasyon içerisinde özelleştirme ile ilgili uyarı mesajının gösterilmesi ile ilgili ayarın ne olduğunu tutar.
table
Tablo detaylarını, alanları ve ilişkileri vb. tutan nesne.
table.modelName
Tablo için model ismi.
table.tableName
Tablonun ismi.
table.schema
Tablonun PostgreSQL şema (schema) ismi
table.comment
Tablonun açıklaması.
table.baseFileName
Dosya isminin base kısmı.
SPECIAL
Konfigürasyon dosyasında Sequelize.define metoduna iletilmek için ayarlanan opsiyonlar da table nesnesi altında bulunur. Örneğin: table.timestamps
table.columns
Tablonun alanlarını içeren dizi.
table.columns[n].source
'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.columns[n].type
Alanın Sequelize tipi.
table.columns[n].accessorName
Alana erişmek için kullanılacak olan accessor metodunun ismi.
table.columns[n].name
Alanın ismi.
table.columns[n].primaryKey
Eğer bu alan birincil anahtarsa bu değer true olur.
table.columns[n].autoIncrement
Eğer bu alan otomatik artırılan (auto increment) bir alansa bu değer true olur.
table.columns[n].allowNull
Eğer bu alan NULL değerine izin veriyorsa bu değer true olur.
table.columns[n].defaultValue
Alan için veri tabanındaki varsayılan değer.
table.columns[n].unique
Alan bir unique anahtar ise veya kompozit bir unique anahtarın parçası ise unique anahtar ismini içeren değer.
table.columns[n].comment
Alanın veri tabnındaki açıklaması.
table.columns[n].references
Eğer bu alanın bir referansı varsa, bu değer alanın referans ettiği tablonun adını içerir.
table.columns[n].referencesKey
Eğer bu alanın bir referansı varsa, bu değer alanın referans ettiği alanın adını içerir.
table.columns[n].onUpdate
Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.columns[n].onDelete
Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies
Tablonun hasMany ilişkilerini içeren dizi.
table.hasManies[n].type
İlişkinin tipini gösteren 'hasMany' değeri.
table.hasManies[n].source
'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.hasManies[n].name
İlişkinin veri tabanındaki ismi.
table.hasManies[n].model
Bu ilişkinin referans ettiği modelin ismi.
table.hasManies[n].as
İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.hasManies[n].targetSchema
İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.hasManies[n].targetTable
İlişkinin referans ettiği tablonun ismi.
table.hasManies[n].foreignKey
İlişkinin referans ettiği tablodaki yabancı anahtar alanının ismi.
table.hasManies[n].onDelete
Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies[n].onUpdate
Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.hasManies[n].through
Eğer bu bir through (many to many) ilişki ise ara birleşim tablosunun ismi. Through ilişkiler Sequelize 2.0 RC4 itibari ile kaldırılacak (DEPRECATED) olarak işaretlendi.
table.belongsTos
Tablonun belongsTo ilişkilerini içeren dizi.
table.belongsTos[n].type
İlişkinin tipini gösteren 'belongsTo' değeri.
table.belongsTos[n].source
'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.belongsTos[n].name
İlişkinin veri tabanındaki ismi.
table.belongsTos[n].model
Bu ilişkinin referans ettiği modelin ismi.
table.belongsTos[n].as
İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.belongsTos[n].targetSchema
İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.belongsTos[n].targetTable
İlişkinin referans ettiği tablonun ismi.
table.belongsTos[n].foreignKey
Bu tablodaki bu ilişkiye ait olan yabancı anahtar alanının ismi.
table.belongsTos[n].onDelete
Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsTos[n].onUpdate
Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies
Tablonun belongsToMany ilişkilerini içeren dizi. belongsToMany ilişkilleri Sequelize 2.0 RC4 ve sonraki versiyonlarda mevcuttur.
table.belongsToManies[n].type
İlişkinin tipini gösteren 'belongsToMany' değeri.
table.belongsToManies[n].source
'generator' yazısı. Bu nesne değerinin otomatik üretildiğini gösterir. Eğer kullanıcı modifiye edilen özellikleri bir döngü ile işlemek isterse vb. nedenlerle ayrım yapabilmesi için kullanılabilir.
table.belongsToManies[n].name
İlişkinin veri tabanındaki ismi.
table.belongsToManies[n].model
Bu ilişkinin referans ettiği modelin ismi.
table.belongsToManies[n].as
İlişki için alias ismi. Bu alias ismi Sequelize içerisinden bu ilişkiye erişmek için kullanılır.
table.belongsToManies[n].targetSchema
İlişkinin referans ettiği PostgreSQL şemanın (schema) ismi.
table.belongsToManies[n].targetTable
İlişkinin referans ettiği tablonun ismi.
table.belongsToManies[n].foreignKey
Ara birleşim tablosundan bu tabloya referans veren yabancı anahtar alanının ismi.
table.belongsToManies[n].otherKey
Ara birleşim tablosundan diğer hedef tabloya referans veren yabancı anahtar alanının ismi.
table.belongsToManies[n].onDelete
Alanın on delete değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies[n].onUpdate
Alanın on update değeri. (SET NULL, CASCADE, RESTRICT etc.)
table.belongsToManies[n].through
Ara birleşim tablosunun ismi.
table.relations
Tüm türlerdeki ilişkilerin birleşik listesini içeren dizi. Bu dizi hasMany ilişkileri, hasMany through ilişkileri, belongsTo ilişkileri, belongsToMany ilişkilerinin hepsini içerir.
Örnekler
========Eager Loading
-------------
sequelize-pg-generator ilişkileri "as" kullanarak isimlendirir. Aksi takdirde aynı tablolar arasında tanımlanacak olan birden fazla ilişki çakışır. Örneğin:account has many contacts as primaryContacts (account -----< contact)
account has many contacts as secondaryContacts (account ----< contact)
Bu durumda sequelize.js "as" isminin eager loading sırasında "as" parametresi olarak verilmesini istiyor..
account = orm.model('public.account'); // Can be configured without schema.
contact = orm.model('public.contact'); // Can be configured without schema.
account.findAll({ include: [ { model: contact, as: "primaryContacts" } ] }).then(function(data) {
console.log(data[0].primaryContacts[0].name);
});API
===