logologo
スタート
マニュアル
開発
プラグイン
API
ホーム
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
スタート
マニュアル
開発
プラグイン
API
ホーム
logologo
API概要

@nocobase/auth

AuthManager
Auth
BaseAuth

@nocobase/cache

CacheManager
キャッシュ

@nocobase/cli

NocoBase CLI
グローバル環境変数

@nocobase/client

アプリケーション
プラグイン

@nocobase/database

コレクション
フィールド

interfaces

BaseInterface
フィルター演算子

RelationRepository

BelongsToManyRepository
belongs-to-repository
HasManyRepository
HasOneRepository
リポジトリ

shared

create-options
destroy-options
find-one
find-options
transaction
update-options

@nocobase/data-source-manager

DataSourceManager
DataSource (抽象)
ICollectionManager
ICollection
IField
IModel
IRepository

@nocobase/flow-engine

データソースマネージャー
フローコンテキスト
FlowEngine
フローモデル
フローリソース

@nocobase/logger

ロガー

@nocobase/server

AppCommand
アプリケーション
AuditManager
コンテキスト
マイグレーション
プラグイン

@nocobase/sdk

Auth
ストレージ
Previous PageHasOneRepository
Next Pageshared
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#リポジトリ

#概要

特定のコレクションオブジェクトから、そのリポジトリオブジェクトを取得して、データテーブルの読み書き操作を実行できます。

const { UserCollection } = require('./collections');

const UserRepository = UserCollection.repository;

const user = await UserRepository.findOne({
  filter: {
    id: 1,
  },
});

user.name = 'new name';
await user.save();

#クエリ

#基本的なクエリ

リポジトリオブジェクトでは、find*系のメソッドを呼び出すことでクエリ操作を実行できます。これらのクエリメソッドはすべてfilterパラメーターの指定に対応しており、データのフィルタリングに利用できます。

// SELECT * FROM users WHERE id = 1
userRepository.find({
  filter: {
    id: 1,
  },
});

#オペレーター

リポジトリのfilterパラメーターでは、さまざまなオペレーターも提供されており、より多様なクエリ操作を実行できます。

// SELECT * FROM users WHERE age > 18
userRepository.find({
  filter: {
    age: {
      $gt: 18,
    },
  },
});

// SELECT * FROM users WHERE age > 18 OR name LIKE '%张%'
userRepository.find({
  filter: {
    $or: [{ age: { $gt: 18 } }, { name: { $like: '%张%' } }],
  },
});

オペレーターの詳細については、フィルターオペレーターを参照してください。

#フィールドの制御

クエリ操作時には、fields、except、appendsパラメーターを使用して出力フィールドを制御できます。

  • fields: 出力フィールドを指定します。
  • except: 出力フィールドから除外します。
  • appends: 関連フィールドを出力に追加します。
// 結果にはidとnameフィールドのみが含まれます。
userRepository.find({
  fields: ['id', 'name'],
});

// 結果にはpasswordフィールドは含まれません。
userRepository.find({
  except: ['password'],
});

// 結果には関連オブジェクトであるpostsのデータが含まれます。
userRepository.find({
  appends: ['posts'],
});

#関連フィールドのクエリ

filterパラメーターは関連フィールドによるフィルタリングに対応しています。例:

// 関連するpostsに'post title'というタイトルのオブジェクトが存在するuserオブジェクトをクエリします。
userRepository.find({
  filter: {
    'posts.title': 'post title',
  },
});

関連フィールドはネストすることもできます。

// そのpostsのcommentsに`keywords`が含まれるという条件を満たすuserオブジェクトをクエリします。
await userRepository.find({
  filter: {
    'posts.comments.content': {
      $like: '%keywords%',
    },
  },
});

#ソート

sortパラメーターを使用すると、クエリ結果をソートできます。

// SELECT * FROM users ORDER BY age
await userRepository.find({
  sort: 'age',
});

// SELECT * FROM users ORDER BY age DESC
await userRepository.find({
  sort: '-age',
});

// SELECT * FROM users ORDER BY age DESC, name ASC
await userRepository.find({
  sort: ['-age', 'name'],
});

関連オブジェクトのフィールドでソートすることもできます。

await userRepository.find({
  sort: 'profile.createdAt',
});

#作成

#基本的な作成

リポジトリを通じて新しいデータオブジェクトを作成します。

await userRepository.create({
  name: '张三',
  age: 18,
});
// INSERT INTO users (name, age) VALUES ('张三', 18)

// 一括作成にも対応しています。
await userRepository.create([
  {
    name: '张三',
    age: 18,
  },
  {
    name: '李四',
    age: 20,
  },
]);

#関連の作成

作成時に関連オブジェクトを同時に作成できます。クエリと同様に、関連オブジェクトのネストもサポートされています。例:

await userRepository.create({
  name: '张三',
  age: 18,
  posts: [
    {
      title: 'post title',
      content: 'post content',
      tags: [
        {
          name: 'tag1',
        },
        {
          name: 'tag2',
        },
      ],
    },
  ],
});
// ユーザーを作成すると同時に、postをユーザーに関連付け、tagsをpostに関連付けます。

関連オブジェクトがすでにデータベースに存在する場合、そのIDを渡すことで、作成時に既存の関連オブジェクトとの関連付けを確立できます。

const tag1 = await tagRepository.findOne({
  filter: {
    name: 'tag1',
  },
});

await userRepository.create({
  name: '张三',
  age: 18,
  posts: [
    {
      title: 'post title',
      content: 'post content',
      tags: [
        {
          id: tag1.id, // 既存の関連オブジェクトとの関連付けを確立します。
        },
        {
          name: 'tag2',
        },
      ],
    },
  ],
});

#更新

#基本的な更新

データオブジェクトを取得した後、そのデータオブジェクト(Model)のプロパティを直接変更し、saveメソッドを呼び出して変更を保存できます。

const user = await userRepository.findOne({
  filter: {
    name: '张三',
  },
});

user.age = 20;
await user.save();

データオブジェクトであるModelはSequelize Modelを継承しています。Modelの操作については、Sequelize Modelを参照してください。

リポジトリを通じてデータを更新することもできます。

// フィルタリング条件を満たすデータレコードを更新します。
await userRepository.update({
  filter: {
    name: '张三',
  },
  values: {
    age: 20,
  },
});

更新時には、whitelistやblacklistパラメーターを使用して更新フィールドを制御できます。例:

await userRepository.update({
  filter: {
    name: '张三',
  },
  values: {
    age: 20,
    name: '李四',
  },
  whitelist: ['age'], // ageフィールドのみを更新します。
});

#関連フィールドの更新

更新時に、関連オブジェクトを設定できます。例:

const tag1 = tagRepository.findOne({
  filter: {
    id: 1,
  },
});

await postRepository.update({
  filter: {
    id: 1,
  },
  values: {
    title: 'new post title',
    tags: [
      {
        id: tag1.id, // tag1との関連付けを確立します。
      },
      {
        name: 'tag2', // 新しいtagを作成し、関連付けを確立します。
      },
    ],
  },
});

await postRepository.update({
  filter: {
    id: 1,
  },
  values: {
    tags: null, // postとtagsの関連付けを解除します。
  },
});

#削除

リポジトリのdestroy()メソッドを呼び出すことで削除操作を実行できます。削除時にはフィルタリング条件を指定する必要があります。

await userRepository.destroy({
  filter: {
    status: 'blocked',
  },
});

#コンストラクター

通常、開発者が直接呼び出すことはありません。主にdb.registerRepositories()でタイプを登録した後、db.collection()のパラメーターで、対応する登録済みのリポジトリタイプを指定し、インスタンス化を完了します。

シグネチャ

  • constructor(collection: Collection)

例

import { Repository } from '@nocobase/database';

class MyRepository extends Repository {
  async myQuery(sql) {
    return this.database.sequelize.query(sql);
  }
}

db.registerRepositories({
  books: MyRepository,
});

db.collection({
  name: 'books',
  // ここで登録済みのリポジトリにリンクします
  repository: 'books',
});

await db.sync();

const books = db.getRepository('books') as MyRepository;
await books.myQuery('SELECT * FROM books;');

#インスタンスメンバー

#database

コンテキストが属するデータベース管理インスタンスです。

#collection

対応するコレクション管理インスタンスです。

#model

対応するモデルクラスです。

#インスタンスメソッド

#find()

データベースからデータセットをクエリします。フィルタリング条件やソートなどを指定できます。

シグネチャ

  • async find(options?: FindOptions): Promise<Model[]>

タイプ

type Filter = FilterWithOperator | FilterWithValue | FilterAnd | FilterOr;
type Appends = string[];
type Except = string[];
type Fields = string[];
type Sort = string[] | string;

interface SequelizeFindOptions {
  limit?: number;
  offset?: number;
}

interface FilterByTk {
  filterByTk?: TargetKey;
}

interface CommonFindOptions extends Transactionable {
  filter?: Filter;
  fields?: Fields;
  appends?: Appends;
  except?: Except;
  sort?: Sort;
}

type FindOptions = SequelizeFindOptions & CommonFindOptions & FilterByTk;

詳細

#filter: Filter

クエリ条件。データ結果のフィルタリングに使用されます。渡されるクエリパラメーターでは、keyはクエリ対象のフィールド名であり、valueにはクエリする値を渡すことができます。また、オペレーターと組み合わせて他の条件でデータをフィルタリングすることも可能です。

// nameが'foo'で、ageが18より大きいレコードをクエリします。
repository.find({
  filter: {
    name: 'foo',
    age: {
      $gt: 18,
    },
  },
});

その他のオペレーターについては、クエリオペレーターを参照してください。

#filterByTk: TargetKey

TargetKeyでデータをクエリします。これはfilterパラメーターの便利な方法です。TargetKeyがどのフィールドであるかは、コレクションで設定でき、デフォルトはprimaryKeyです。

// デフォルトでは、idが1のレコードを検索します。
repository.find({
  filterByTk: 1,
});

#fields: string[]

クエリ列。データフィールドの結果を制御するために使用されます。このパラメーターを渡すと、指定されたフィールドのみが返されます。

#except: string[]

除外列。データフィールドの結果を制御するために使用されます。このパラメーターを渡すと、渡されたフィールドは出力されません。

#appends: string[]

追加列。関連データをロードするために使用されます。このパラメーターを渡すと、指定された関連フィールドも出力されます。

#sort: string[] | string

クエリ結果のソート方法を指定します。パラメーターはフィールド名です。デフォルトでは昇順(asc)でソートされます。降順(desc)でソートする必要がある場合は、フィールド名の前に-記号を追加します。例:['-id', 'name']は、id desc, name ascでソートすることを意味します。

#limit: number

結果の数を制限します。SQLのlimitと同じです。

#offset: number

クエリのオフセット。SQLのoffsetと同じです。

例

const posts = db.getRepository('posts');

const results = await posts.find({
  filter: {
    createdAt: {
      $gt: '2022-01-01T00:00:00.000Z',
    },
  },
  fields: ['title'],
  appends: ['user'],
});

#findOne()

データベースから特定の条件を満たす単一のデータをクエリします。SequelizeのModel.findOne()に相当します。

シグネチャ

  • async findOne(options?: FindOneOptions): Promise<Model | null>

例

const posts = db.getRepository('posts');

const result = await posts.findOne({
  filterByTk: 1,
});

#count()

データベースから特定の条件を満たすデータの総数をクエリします。SequelizeのModel.count()に相当します。

シグネチャ

  • count(options?: CountOptions): Promise<number>

タイプ

interface CountOptions
  extends Omit<SequelizeCountOptions, 'distinct' | 'where' | 'include'>,
    Transactionable {
  filter?: Filter;
}

例

const books = db.getRepository('books');

const count = await books.count({
  filter: {
    title: '三字经',
  },
});

#findAndCount()

データベースから特定の条件を満たすデータセットと結果の総数をクエリします。SequelizeのModel.findAndCountAll()に相当します。

シグネチャ

  • async findAndCount(options?: FindAndCountOptions): Promise<[Model[], number]>

タイプ

type FindAndCountOptions = Omit<
  SequelizeAndCountOptions,
  'where' | 'include' | 'order'
> &
  CommonFindOptions;

詳細

クエリパラメーターはfind()と同じです。戻り値は配列で、最初の要素はクエリ結果、2番目の要素は結果の総数です。

#create()

データテーブルに新しく作成されたデータを挿入します。SequelizeのModel.create()に相当します。作成するデータオブジェクトが関連フィールドの情報を持つ場合、対応する関連データレコードも同時に作成または更新されます。

シグネチャ

  • async create<M extends Model>(options: CreateOptions): Promise<M>

例

const posts = db.getRepository('posts');

const result = await posts.create({
  values: {
    title: 'NocoBase 1.0 发布日志',
    tags: [
      // 関連テーブルの主キー値が存在する場合は、そのデータを更新します。
      { id: 1 },
      // 主キー値がない場合は、新しいデータを作成します。
      { name: 'NocoBase' },
    ],
  },
});

#createMany()

データテーブルに複数の新しいデータを挿入します。create()メソッドを複数回呼び出すことに相当します。

シグネチャ

  • createMany(options: CreateManyOptions): Promise<Model[]>

タイプ

interface CreateManyOptions extends BulkCreateOptions {
  records: Values[];
}

詳細

  • records: 作成するレコードのデータオブジェクトの配列です。
  • transaction: トランザクションオブジェクト。トランザクションパラメーターが渡されない場合、このメソッドは自動的に内部トランザクションを作成します。

例

const posts = db.getRepository('posts');

const results = await posts.createMany({
  records: [
    {
      title: 'NocoBase 1.0 发布日志',
      tags: [
        // 関連テーブルの主キー値が存在する場合は、そのデータを更新します。
        { id: 1 },
        // 主キー値がない場合は、新しいデータを作成します。
        { name: 'NocoBase' },
      ],
    },
    {
      title: 'NocoBase 1.1 发布日志',
      tags: [{ id: 1 }],
    },
  ],
});

#update()

データテーブル内のデータを更新します。SequelizeのModel.update()に相当します。更新するデータオブジェクトが関連フィールドの情報を持つ場合、対応する関連データレコードも同時に作成または更新されます。

シグネチャ

  • async update<M extends Model>(options: UpdateOptions): Promise<M>

例

const posts = db.getRepository('posts');

const result = await posts.update({
  filterByTk: 1,
  values: {
    title: 'NocoBase 1.0 发布日志',
    tags: [
      // 関連テーブルの主キー値が存在する場合は、そのデータを更新します。
      { id: 1 },
      // 主キー値がない場合は、新しいデータを作成します。
      { name: 'NocoBase' },
    ],
  },
});

#destroy()

データテーブルからデータを削除します。SequelizeのModel.destroy()に相当します。

シグネチャ

  • async destroy(options?: TargetKey | TargetKey[] | DestroyOptions): Promise<number>

タイプ

interface DestroyOptions extends SequelizeDestroyOptions {
  filter?: Filter;
  filterByTk?: TargetKey | TargetKey[];
  truncate?: boolean;
  context?: any;
}

詳細

  • filter: 削除するレコードのフィルタリング条件を指定します。Filterの詳細な使用法については、find()メソッドを参照してください。
  • filterByTk: TargetKeyで削除するレコードのフィルタリング条件を指定します。
  • truncate: テーブルデータをクリアするかどうか。filterまたはfilterByTkパラメーターが渡されない場合に有効です。
  • transaction: トランザクションオブジェクト。トランザクションパラメーターが渡されない場合、このメソッドは自動的に内部トランザクションを作成します。