sql >> データベース >  >> RDS >> PostgreSQL

SequelizeでSequelizeUniqueConstraintErrorを無視する方法は?

    私の解決策。

    メソッドupdateOrCreateを追加します

    Product.updateOrCreate = function (options) {
        return this.findOrCreate(options).then(res => {
            let [row, created] = res;
            if (created) return [row, created];
            return row.update(options.defaults, options.transaction)
                .then(updated => [updated, created]);
        })
    };
    Tag.updateOrCreate = function (options) {
        return this.findOrCreate(options).then(res => {
            let [row, created] = res;
            if (created) return [row, created];
            return row.update(options.defaults, options.transaction)
                .then(updated => [updated, created]);
        })
    };
    

    使用

    let data = {
        title: 'Chair',
        tag: [
            {name: 'Alpha'},
            {name: 'Beta'}
        ]
    };
    return sequelize.transaction().then(t => {
        return Product.updateOrCreate({
            where: {title: data.title},
            defaults: data,
            transaction: t
        }).then(res => {
            let [product] = res;
            return Promise.all(data.tag.map(tag => {
                return Tag.updateOrCreate({
                    where: {name: tag.name},
                    defaults: tag,
                    transaction: t
                }).then(res => {
                    let [tag] = res;
                    return Promise.resolve(tag);
                }).catch(err => Promise.reject(err.message));
            })).then(() => {
                t.commit();
                sequelize.close();
            }).catch(err => Promise.reject(err));
        }).catch(err => {
            t.rollback();
            sequelize.close();
        });
    });
    


    1. FROMキーワードが予期された場所に見つかりません(Oracle SQL)

    2. 改善したい非常に具体的なMySQLクエリ

    3. データストリームを処理するためのMySQLインサートの最適化

    4. 複数の値の個別の行の数をカウントします