generated at
Objection.js
概要
Knex.jsベースのORM

Model
javascript
const { Model } = require('objection'); class User extends Model { static get tableName() { return 'users'; } }
static tableName
マッピング対象のテーブル名を指定する。
static idColumn
プライマリキーを指定する。
省略時は "id" がデフォルト値として使用される。
static fromJson(json, opts)]
プレーンオブジェクトからModelのインスタンスを生成する。
その際、 jsonSchema に基づいてバリデーションが行われ、失敗した際はエラーが発生する。
toJSON()
Modelのインスタンスをプレーンオブジェクトへ変換する。

Validation
jsonSchema をModelの静的プロパティとして定義しておくと、Modelのインスタンス作成時にバリデーションが行われる。
QueryBuilderの insert patch メソッド等を実行すると、暗黙的にModelのインスタンスが作成されるため、
その際にもバリデーションが行われる。

マイグレーション
Knex.jsのマイグレーション機能を利用する。

キャメルケース・スネークケースの変換

Eager loading
メソッド
QueryBuilder#eager(relationExpression, [modifiers])
QueryBuilder#eagerAlgorithm(algo)
Eager loadingを実行する際のクエリの発行方法(Eager Algorithm)を変更できる。
QueryBuilder#joinEager(relationExpression)
queryBuilder.eager(expr).eagerAlgorithm(JoinEagerAlgorithm) を簡略化したメソッド。
QueryBuilder#eagerOptions(options)
options.joinOperation - 'leftJoin' , 'innerJoin' 等、JOINする際に利用される演算方法を指定する。
RelationExpression
#eager メソッド等で使用する式。
Eager Algorithm
WhereInEagerAlgorithm
デフォルトで使用される。
JoinEagerAlgorithm
NaiveEagerAlgorithm
Tips
JOINテーブルに新しい行を作成する
javascript
await message.$relatedQuery('tags').relate(tag.id) // 'insert into `message_tags` (`tag_id`, `message_id`) values (?, ?)'

サブクエリ
where whereIn の引数に関数を渡す。
その関数内で this を参照し、副問い合わせのために利用されるSQLを構築する。
javascript
class Message extends Model { static async taggedWith(tag, page, perPage) { function tagId() { this.select('id').from('tags').where('name', '=', tag); } function messageIds() { this.select('message_id').from('message_tags').where('tag_id', '=', tagId); } return this .query() .page(page, perPage) .eager('tags') .whereIn('id', messageIds); } } Message.taggedWith('hoge');

テスト
Model.knex(knex) メソッド
Objection.jsが内部で使用するKnexオブジェクトを設定できる。
これを使って、Transactionオブジェクト等を設定すると便利。
javascript
let trx, knex; beforeEach(async () => { knex = Model.knex(); trx = await transaction.start(); Mode.knex(trx); }); afterEach(async () => { await trx.rollback(); Model.knex(knex); });

ロギング
Knex.js debug オプションを有効化すると、実行したクエリがログに出力される

GraphQL