Skip to content

Instantly share code, notes, and snippets.

@og24715
Last active January 31, 2018 04:04
Show Gist options
  • Save og24715/4b297c72e427126a4938881a9b0ecbab to your computer and use it in GitHub Desktop.
Save og24715/4b297c72e427126a4938881a9b0ecbab to your computer and use it in GitHub Desktop.
Sequelize やる

Classで定義したい

これ見る

なにこれ: sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators

Sequelize クラスの引数の4つ目に { operatorsAliases: Op } を追加する。

import Sequelize from "sequelize";

const config = {
  database: "toto",
  username: "postgres",
  password: "postgres"
};

const Op = Sequelize.Op;
const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  {
    dialect: "postgres",
    operatorsAliases: Op,
  }
);

Deprecation warning for String based operators · Issue #8417 · sequelize/sequelize sequelize/sequelize#8417 sequelize/sequelize#8417 (comment)

なにこれ: No Sequelize Instance Passed

Sequelize.Model を継承して作ったモデルの init() 内の super.init() の第2引数を確認する。

# good
super.init({ ... }, { sequelize, ... });

# bad
super.init({ ... }, sequelize, ... );
import Sequelize, { Model } from 'sequelize';

export default class Videos extends Model {
  static init(sequelize) {
    return super.init({}, { sequelize });
  }
}

AWS へデプロイすると動かない

前提として、クラスでモデルを定義するとクラス名でテーブルを検索する。 DBの lower_case_table_names0, 2だと、小文字大文字を区別するので、テーブルがロワーケースの場合テーブルがヒットしない。 Classでモデルを定義すると明示的にテーブル名を指定する方法はないっぽい。 Model.define()と同じく、Model.init()の第2引数で{ freezeTableName: true, tableName: <TABLE NAME> }とすることで明示的にテーブルを指定できる。

Tutorial | Sequelize | The node.js ORM for PostgreSQL, MySQL, SQLite and MSSQL

MySQL の lower_case_table_names について,テーブル名とデータベース名の中の大文字小文字について - その手の平は尻もつかめるさ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment