Sequelize中国語ドキュメントおよびsequelizeモジュールの説明

8202 ワード

本文はSequelize中国語APIドキュメントシリーズの文章の総合インデックスであり、sequelizeモジュールとその内蔵オブジェクトのいくつかの紹介であり、Sequelizeをよりよく理解し、使用することを目的としています.
  • ドキュメントインデックス
  • 公式文書対照
  • sequelizeモジュールの説明
  • 3.1トップオブジェクトSequelize
  • 3.2 Modelオブジェクトのインスタンス化
  • 3.3 Instanceインスタンスの作成

  • リレーショナル・データベースを操作する場合、直接的なORM操作の代わりに、複雑なビジネス・ロジックをカプセル化し、オブジェクト向けにデータ・テーブルを操作するSQLフレームワークを選択します.Sequelizeはノード用である.jsとio.jsの非常に優れたORMフレームワークで、PostgreSQL、MySQL、SQLite、MSSQLなどの多様な関係型データベースをサポートしています.
    1.ドキュメントインデックス
    Sequelize中国語APIドキュメントシリーズは9編ありますが、本サイトでは公式ドキュメントのうち、関連オブジェクトの使用紹介(Documentation)部分とオブジェクトのAPI部分を読みやすくするためにまとめました.ドキュメントインデックスは次のとおりです.
  • クイックエントリー、SequelizeクラスSequelizeクラスは、sequlizeモジュールを参照して上位オブジェクトを取得します.sequlizeインスタンスを作成します.また、Utilsツールクラス、Transactionトランザクションクラスなど、モジュール内の他のオブジェクトの参照を取得することもできます.インスタンスの作成後、Model(モデル)の作成または定義、クエリーの実行、データベース構造の同期などの操作をインスタンスで行うことができます.
  • Modelの定義、ModelクラスのAPI Modelの使用は、データベース内のテーブルに相当し、「モデル」または「ファクトリ」と呼ばれることもある.Modelは、コンストラクション関数によって作成することはできませんが、sequlize.defineメソッドによってのみ定義またはsequlize.importによってインポートできます.defineによってModelを定義することは、モデルとデータテーブルとのマッピング関係を定義することに相当し、モデルによってテーブル記録の増加、削除、変更、検索などの操作を実現することができる.
  • モデル(表)間の関係/関連モデル(Model)間には、一対一(One-To-One)、一対多(One-To-Many)など、様々な関係が存在する.モデル間の関係は本質的に、データベース内のテーブル間の関係記述であり、これらの関係により、データベース内のテーブル間のプライマリ/外部キー制約の作成を実現できます.これらの関係に基づいて、クエリー時にデータベースで実行される接続クエリーまたは複合クエリーSQL文を生成することもできます.
  • クエリーと元のクエリーSequelizeには、Model(モデル)のメソッドクエリーとsequelize.query()を使用してSQL文ベースの元のクエリーの2つのクエリーがあります.
  • インスタンスの使用、Instanceクラス紹介Instanceクラスは、Modelオブジェクトによって作成されるべきデータベース内のレコードの行を表します.Instanceインスタンスには、Model.buildメソッドによって作成された非永続化インスタンスと、Model.createメソッドによって作成された永続化インスタンスの2種類があります.Instanceは翻訳後も「インスタンス」と呼ばれますが、Sequelizeではクラスであり、そのインスタンスを「インスタンス」クラスのインスタンスと呼ぶべきです.
  • トランザクションの使用とTransactionクラスTransactionは、Sequelizeのトランザクション機能を実装するためのサブクラスであり、Sequelize.transaction()メソッドを呼び出すことによってクラスのインスタンスを作成することができる.Sequelizeでは、自動コミット/ロールバックがサポートする、またはユーザによる手動コミット/ロールバック
  • がサポートされる.
  • Scopes役割ドメインの使用Scopes-役割ドメインは、最終的にSQLクエリのwhere句を生成する制限範囲を表します.モデル定義方法sequelize.defineoptionパラメータ、またはModel.scope()方法によって指定される.
  • フック関数の使用、Hooks関連API Hooks(フック)とは、モデルのライフサイクルの特別な時点で呼び出される関数を指します.たとえば、モデルインスタンスが作成される前にbeforeCreate関数が呼び出され、モデルインスタンスが作成されるとafterCreate関数が呼び出されます.これらのフック関数を使用すると、ライフサイクルの特別な時点でモデルデータにアクセスまたは操作する能力があります.
  • データ型クラスDataTypeとそのAPIは、sequelize.defineメソッドを使用してモデルを定義する際に、一般的にモデル属性(列)のタイプtypeを指定します.これはデータ型を表し、Sequelizeは指定したタイプでデータベースにフィールドを作成します.これらのタイプはsequelizeモジュールのDataTypesクラスに定義され、静的クラスがその属性またはメソッドを直接参照することができる.
  • Migrationsデータ移行とQueryInterfaceオブジェクトSequelize 2.0.0は、gulpに基づいてsequelize-cliとgulp-sequelizeを組み合わせた新しいCLI(コマンドラインツール)を導入し、CLIはデータ移行とプロジェクトブートをサポートします.移行により、既存のデータベースを別のステータスに移行できます.また、これらの移行ファイルは移行ファイルに保存されます.移行ファイルは、新しいステータスに到達する方法と、移行前の古いステータスに戻る方法を説明します.

  • 2.公式文書照合Sequelizeの公式ドキュメントでは、Sequelizeモジュールの紹介は主にDocumentationAPIの2つの部分に分かれています.Documentationモジュール、モジュール内蔵オブジェクトなどの使用方法を紹介する.APIは、Sequelizeとその内蔵オブジェクトのAPIを紹介する.Sequelize中国語APIドキュメントには、ほとんどのオブジェクト使用紹介およびオブジェクトAPIの翻訳が含まれていますが、Errorsなどのオブジェクトがあまり使用されていない場合は、必要に応じて公式ドキュメントを自分で確認してください.官文書とSequelize中国語API文書の対照関係は以下の通りである.
  • Documentation
  • Getting Started-クイックエントリー
  • Working with table schemas-未翻訳
  • Models
  • Definition-Model定義記述
  • Usage-Modelモデルの使用
  • Querying-Modelクエリー
  • Scopes-Scopes役割ドメインの使用
  • Instances-インスタンスの作成と使用
  • Relations/Associations-リレーションシップ/関連の使用
  • Hooks-フック関数の使用
  • Transactions-トランザクションの使用
  • Working with legacy tables-未翻訳
  • Raw queries-元のクエリ
  • Migrations-Migrationsデータ移行とQueryInterfaceオブジェクト
  • API
  • Sequelize-Sequelizeクラス
  • Model-ModelクラスのAPI
  • Instance-InstanceクラスのAPI
  • Associations
  • Overview-関連関係総合紹介
  • BelongsTo(1:1)-関係
  • に属する
  • HasOne(1:1)-
  • の関係を持つ
  • HasMany(1:m)-1対の複数の関係
  • BelongsToMany(n:m)-多対多関係
  • Hooks-HooksクラスのAPI
  • Transaction-Transactionクラス
  • Datatypes-データ型クラスDataTypeおよびそのAPI
  • Deferrable-未翻訳
  • Errors-未翻訳

  • 3.sequelizeモジュール紹介sequelizeモジュールには、Sequelizeインスタンスを作成したり、他のサブオブジェクトの参照を取得したりすることができるトップレベルのオブジェクトsequlizeが含まれています.sequelizeモジュールの主なサブオブジェクトは、Modelモデルオブジェクト、Instanceインスタンスオブジェクト、Transactionトランザクションオブジェクトなどである.また、sequelizeモジュールを使用して、Validator検証オブジェクト、Utilsツール、Promiseなどのサブオブジェクトを内部で使用することもできます.
    3.1トップクラスのオブジェクトSequelizeモジュールをrequire('sequelize')で参照すると、Sequelizeのプライマリクラスへのアクセス権が得られます.
    var Sequelize = require('sequelize');

    データベース・アクセス・インスタンスの作成Sequelizeはコンストラクション関数でもあり、このコンストラクション関数を使用して指定したデータベースへのアクセスインスタンス-sequelizeを作成できます.
    var sequelize = new Sequelize('database', 'username', 'password');

    サブオブジェクトアクセスsequelizeの中には、ModelInstanceなどのモジュール定義があるサブオブジェクト、ORM関連のサブオブジェクト、ValidatorUtilsなどのsequelizeのモジュールに依存するモジュールもあり、これらのクラスには、エントリオブジェクトSequelizeまたはsequelizeのインスタンスオブジェクトを介してアクセスできるものがあるが、ModelInstanceのオブジェクトは、直接インスタンス化することはできない.
    これらのオブジェクトのsequelizeへの追加形式は、次のとおりです.
    Sequelize.prototype.Model = Sequelize.Model = Model;
    Sequelize.prototype.Instance = Sequelize.Instance = Instance;
    
    Sequelize.prototype.Utils = Sequelize.Utils = Utils;
    Sequelize.prototype.Validator = Sequelize.Validator = require('validator');

    3.2 Modelオブジェクトのインスタンス化
    上記のように、Sequelize.Modelまたはsequelize.ModelModelオブジェクトにアクセスできますが、newで直接インスタンス化することはできません.sequelizeインスタンスは、sequlize.defineインスタンスのsequlize.importメソッド定義またはModelインポートによってのみ作成できます.
    //    define     Model
    var User = sequelize.define('user', {
      username: Sequelize.STRING,
      birthday: Sequelize.DATE
    });
    
    //    import     Model
    //         /path/to/models/project.js
    module.exports = function(sequelize, DataTypes) {
      return sequelize.define("project", {
        name: DataTypes.STRING,
        description: DataTypes.TEXT
      })
    }
    
    var Project = sequelize.import(__dirname + "/path/to/models/project")

    3.3 Instanceインスタンスの作成Instanceは、データテーブルの行を表し、オブジェクトも直接インスタンス化できません.Modelインスタンスがfindまたはcreateなどの操作を行うと自動的に作成され、コールバック関数で返されます.Instance例には、永続化例、100永続化例の2種類がある.次のように、非永続化実列を作成できます.
    //     
    var Task = sequelize.define('task', {
      title: Sequelize.STRING,
      rating: { type: Sequelize.STRING, defaultValue: 3 }
    })
     
    // build      Instance   
    var task = Task.build({title: 'very important task'})
    Instanceインスタンスを作成すると、このレコードを変更保存するなどの操作ができます.
    task.save().then(function() {
      //       
    })

    または、Model.createの方法で永続化インスタンスを作成することができます.
    Task.create({ title: 'foo', description: 'bar', deadline: new Date() }).then(function(task) {
      // task         
    })