sequelize-typescript

注意:

  • 注意關(guān)聯(lián)的名稱 例如hobbies在使用HasMany 會(huì)生成createHobby關(guān)聯(lián)方法 建議根據(jù)關(guān)聯(lián)來(lái)起名稱 對(duì)多就是負(fù)數(shù) 對(duì)一就是單數(shù)
  • 關(guān)聯(lián)關(guān)系(@BelongsToMany,@HasMany... )不要加@Column
  • 加了關(guān)聯(lián)關(guān)系的類才能使用對(duì)應(yīng)的關(guān)聯(lián)關(guān)系操作 沒(méi)關(guān)聯(lián)的類不能因?yàn)楸魂P(guān)聯(lián)而使用關(guān)聯(lián)操作

常見(jiàn)操作

  • CURD
  • c => Model.create();
  • u => Model.update(); instance.save(); instance.update();
  • r =>
    1535300288894.png
  • d => Model.destory();instance.destory();

表、列配置信息

  • 表常用配置:
    1535300562473.png
  • 數(shù)據(jù)庫(kù)常用配置:
    1535300980622.png
  • 字段常用配置

    • 主鍵:(注意 @Column一定要在下面)
      1535301033927.png
  • 外鍵:
    1535301085507.png
  • 自定義驗(yàn)證:
    1535301987646.png
  • 鉤子:
    1535302147260.png
    • 當(dāng)一條數(shù)據(jù)被創(chuàng)建或者更新時(shí)可以調(diào)用這些鉤子函數(shù)
    • 鉤子函數(shù)必須是靜態(tài)函數(shù)

關(guān)聯(lián)關(guān)系

  1. one to many
@Table
export default class Person extends Model<Person> {

  @Column
  name: string;

  @Column
  birthday: Date;

  @HasMany(() => Hobby,"p_id")
  hobbies: Hobby[];
}

@Table
export default class Hobby extends Model<Hobby> {

    @Column
    name: string;

    @ForeignKey(()=>Person)
    @AllowNull
    @Column({field:"p_id"})
    pId: string;

    @BelongsTo(() => Person)
    person: Person;
}

 const pModel = await Person.create<Person>({ name: "vijay", birthday: new Date() });
// create
const hModel = await pModel.$create<Hobby>("Hobby", { name: "sport" });
// add
const h = Hobby.build({ name: "sport2" });
await h.save();
await pModel.$add<Hobby>("Hobby",h);

// 常用關(guān)聯(lián)方法
// modelA.$set('Hobbies', [ /* instance */]).then( /* ... */);
// modelA.$add('Hobby'|'Hobbies', /* instance */).then( /* ... */);
// modelA.$get('Hobbies').then( /* ... */);
// modelA.$count('Hobbies').then( /* ... */);
// modelA.$has('Hobbies').then( /* ... */);
// modelA.$remove('Hobby'|'Hobbies', /* instance */ ).then( /* ... */);
// modelA.$create('Hobby', /* value */ ).then( /* ... */);
  1. one to one
@Table
export default class Hobby extends Model<Hobby> {

    @Column
    name: string;

    @ForeignKey(()=>Person)
    @AllowNull
    @Column({field:"p_id"})
    pId: string;

    @BelongsTo(() => Person)
    person: Person;
}

@Table
export default class Person extends Model<Person> {

  @Column
  name: string;

  @Column
  birthday: Date;

  @HasOne(() => Hobby,"p_id")
  hobby: Hobby;
}
  1. many to many

    @Table
    export default class Person extends Model<Person> {
        @PrimaryKey
        @AutoIncrement
        @Column
        id: number;
    
        @Column
        name: string;
    
        @Column
        birthday: Date;
    
        @BelongsToMany(() => Hobby,()=>HobbyPerson)
        hobbies: Hobby[];
    }
    
    @Table
    export default class HobbyPerson extends Model<HobbyPerson>{
        @PrimaryKey
        @AutoIncrement
        @Column
        id:number;
    
        @ForeignKey(()=>Hobby)
        @AllowNull
        @Column({field:"h_id"})
        hId:number;
    
        @ForeignKey(()=>Person)
        @AllowNull
        @Column({field:"p_id"})
        pId:number;
    }
    
    @Table
    export default class Person extends Model<Person> {
        @PrimaryKey
        @AutoIncrement
        @Column
        id: number;
    
        @Column
        name: string;
    
        @Column
        birthday: Date;
    
        @BelongsToMany(() => Hobby,()=>HobbyPerson)
        hobbies: Hobby[];
    }
    

    原生sequelize遷移

  • 將sequelize換成從sequelize-typescript 中導(dǎo)出的

    import { Sequelize } from 'sequelize-typescript';
    // import * as Sequelize from 'sequelize'
    
  • 將后續(xù)用sequelize-typescript寫(xiě)的模型類加入到sequlize實(shí)例中

    import Car from '../models/Car';
    
    const db = new Sequelize({
        dialect: 'mysql',
        operatorsAliases: true, //是否識(shí)別字段別名中的下劃線
        database: 'shaliang',
        username: 'root',
        password: 'root',
        define: {
            timestamps: true,//開(kāi)啟時(shí)間戳 create_at delete_at update_at
            paranoid: true,//開(kāi)啟假刪除
            underscored: true,//下劃線
            charset: 'utf8',
            freezeTableName: true//固定表名為單數(shù)  默認(rèn)表名是xxxs
        },
        pool: {
            max: 10,
            min: 0,
            acquire: 30000,
            idle: 10000
        },
        timezone: '+08:00',//更改為北京時(shí)區(qū)
        // modelPaths: [__dirname + '/../models'] //模型文件地址
    });
    db.addModels([Car]);
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末齐鲤,一起剝皮案震驚了整個(gè)濱河市陈醒,隨后出現(xiàn)的幾起案子航罗,更是在濱河造成了極大的恐慌楞件,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件国葬,死亡現(xiàn)場(chǎng)離奇詭異安吁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)睛琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)盒蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人师骗,你說(shuō)我怎么就攤上這事历等。” “怎么了辟癌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵寒屯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我黍少,道長(zhǎng)寡夹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任仍侥,我火速辦了婚禮要出,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘农渊。我一直安慰自己患蹂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布砸紊。 她就那樣靜靜地躺著传于,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醉顽。 梳的紋絲不亂的頭發(fā)上沼溜,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音游添,去河邊找鬼系草。 笑死通熄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的找都。 我是一名探鬼主播唇辨,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼能耻!你這毒婦竟也來(lái)了赏枚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晓猛,失蹤者是張志新(化名)和其女友劉穎饿幅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體戒职,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栗恩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帕涌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摄凡。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚓曼,靈堂內(nèi)的尸體忽然破棺而出亲澡,到底是詐尸還是另有隱情,我是刑警寧澤纫版,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布床绪,位于F島的核電站,受9級(jí)特大地震影響其弊,放射性物質(zhì)發(fā)生泄漏癞己。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一梭伐、第九天 我趴在偏房一處隱蔽的房頂上張望痹雅。 院中可真熱鬧,春花似錦糊识、人聲如沸绩社。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愉耙。三九已至,卻和暖如春拌滋,著一層夾襖步出監(jiān)牢的瞬間朴沿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赌渣,地道東北人魏铅。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像坚芜,于是被迫代替她去往敵國(guó)和親沦零。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 該文章為轉(zhuǎn)載文章货岭,作者簡(jiǎn)介:汪劍,現(xiàn)在在出門(mén)問(wèn)問(wèn)負(fù)責(zé)推薦與個(gè)性化疾渴。曾在微軟雅虎工作千贯,從事過(guò)搜索和推薦相關(guān)工作。 T...
    名字真的不重要閱讀 5,220評(píng)論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法搞坝,類相關(guān)的語(yǔ)法搔谴,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法桩撮,異常的語(yǔ)法敦第,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,598評(píng)論 18 399
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,367評(píng)論 0 17
  • 以前我去哪你就去哪店量,后來(lái)我在哪你都不在 想盡方法靠近我的是你芜果,一鍵刪除不說(shuō)再見(jiàn)的也是你 先喜歡我拽我入河的是你,后...
    丶夏憶閱讀 360評(píng)論 0 1
  • 生而為人融师,語(yǔ)言即是人類的特有技能右钾,是人類重要的交際工具,人們借助語(yǔ)言保存及傳遞人類的文明旱爆,隨著時(shí)間的推移舀射、社會(huì)的發(fā)...
    小生無(wú)才閱讀 864評(píng)論 0 0