PHPackages                             burdock/php-datamodel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. burdock/php-datamodel

ActiveLibrary[Database &amp; ORM](/categories/database)

burdock/php-datamodel
=====================

v0.2.49(2y ago)0231[1 PRs](https://github.com/ittun55/burdock-php-datamodel/pulls)1PHP

Since Nov 9Pushed 2y ago1 watchersCompare

[ Source](https://github.com/ittun55/burdock-php-datamodel)[ Packagist](https://packagist.org/packages/burdock/php-datamodel)[ RSS](/packages/burdock-php-datamodel/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (7)Versions (79)Used By (1)

burdock-php-datamodel
=====================

[](#burdock-php-datamodel)

Features
--------

[](#features)

データベース検索の各種条件を array 形式で指定できる ActiveRecord データモデル.

### DataModel メソッド

[](#datamodel-メソッド)

#### PDO の注入

[](#pdo-の注入)

- Model::setPDOInstance(PDO $pdo, string $name='default'): void PDO オブジェクトを複数保持可能
- Model::getPDOInstance(string $name='default'): PDO 指定した名前の PDO オブジェクトを取得

#### ロガー関連

[](#ロガー関連)

- Model::setLogger(LoggerInterface$logger): void
    - ロガーを指定することでSQLクエリを出力可能
- Model::getLogger(): LoggerInterface
    - ロガーを取得. 指定されていなければ NullLogger インスタンスを返す

#### モデル定義関連

[](#モデル定義関連)

- Model::getTableName(): string
- Model::loadSchema(array $schema): void
    - テーブルスキーマを読み込む.
    - iamcal/sql-parser の出力ファイルをそのまま指定可能.
- Model::getFieldNames(bool $with\_hidden=false): array
- Model::getField(string $name): ?array
- Model::getIndexes(): array
- Model::getPrimaryKeys(): array
- Model::\_isPrivate(bool $field): bool

#### インスタンスデータ操作

[](#インスタンスデータ操作)

- $model-&gt;\_\_set(string $field, $value): void
- $model-&gt;set(string $key, $value): void
- $model-&gt;\_\_get(string $field)
- $model-&gt;get($key, $default=null)
- $model-&gt;setData($data=null): void
- $model-&gt;getData($with\_hidden=false): array
- $model-&gt;setDirtyField(string $field, $value): void
- $model-&gt;isDirty($fields=null): bool
- $model-&gt;convertData($data): array
- $model-&gt;getKeyNotFoundMessage(string $key): string

#### データベース操作

[](#データベース操作)

- Model::find(array $params=\[\], ?array $opts=null, ?PDO $pdo=null): array
- Model::findById($data, ?array $opts=null, ?PDO $pdo=null)
- Model::findOne(array $params=\[\], ?array $opts=null, ?PDO $pdo=null)
- Model::count(array $params=\[\], ?array $opts=null, ?PDO $pdo=null): int
- Model::paginate($params): array
- $model-&gt;insert(?PDO $pdo=null, $ignore=false): void
- $model-&gt;update(?PDO $pdo=null, bool $diff=false): self
- $model-&gt;delete(?bool $hard=false, ?PDO $pdo=null): self

#### ユーティリティ

[](#ユーティリティ)

- $model-&gt;convertJsonFields($data): array
- backupLoaded(): void
- getDiffs(): array
- getMsecDate(): string
- setDiffs(): void

### DataModel プロパティ

[](#datamodel-プロパティ)

- soft\_delete\_field : 指定されたフィールドを論理削除フィールドとして検索等行う
- json\_fields : JSON に encode / decode するフィールドを指定
    - 対象フィールドにデータをインスタンス保存時に自動で JSON シリアライズ化
    - インスタンスプロパティまたは $model-&gt;get(), $model-&gt;getData() 経由でデータを取得すると自動で配列データに変換される
    - find() 系メソッドで配列出力の場合は、JSON化されない. 必要な場合は Model::convertJsonFields($data) で変換可能。
- updated\_at は値が設定されていなければ、自動で値を付与する
    - 値が手動で設定された場合はその値で上書きする

### find(array $params=\[\], ?array $opts=null, ?PDO $pdo=null)

[](#findarray-params-array-optsnull-pdo-pdonull)

- $params 検索条件となるパラメータ連想配列

```
[
    Sql::SELECT => [], // 指定が有る場合は、モデルインスタンスではなく配列を返す
    Sql::JOIN   => [  // 指定が有る場合は、モデルインスタンスではなく配列を返す
        [
            'inner' => ['table_a tbl_a', [
                ['tbl_a.tbl_id', 'tbl.id'],
                ['tbl_a.deleted_at' => null],
                ['tbl_a.owner_id' => [Sql::EQ => 999]]
            ]]
        ]
    ],
    Sql::WHERE  => [
        Sql::OP_OR => [
            ['field1' => 'value1'], // 省略時は self::OP_EQ
            ['field2' => [Sql::OP_NE => 'value2']],
            [Sql::OP_AND => [
                ['field3' => [Sql::OP_GE => 'value3']],
                ['field4' => [Sql::OP_LT => 'value4']]
            ],
        ]
    ],
    Sql::ORDER_BY => [],
    Sql::LIMIT => M, // 数値
    Sql::OFFSET => N, // 数値
    Sql::FOR_UPDATE => false / true
]

```

- SELECT で指定可能な条件: 以下のいずれかの文字列表現を要素に持つ配列

    - 'table.field alias' table, field をバッククォートでラップ
    - 'table.field' table, field をバッククォートでラップ
    - 'field' field をバッククォートでラップ
    - '@@...' 何も変換せずに SQL として出力
- SELECT が無指定の場合、Model::getFieldNames() がセットされる
- JOIN で指定可能な条件: INNER または OUTER の JOIN 条件を１つ以上含む配列

    - ※※※ INNER または OUTER の JOIN 条件配列単体では動作せず、複数の JOIN 条件をラップする外側の配列が必要 ※※※
    - Sql::INNER | Sql::OUTER =&gt; \['tablename\_to\_join alias', \[ON 結合条件, ...\]\]
        - ※※※ ON 結合条件単体では動作せず、複数の結合条件をラップする外側の配列が必要 ※※※
        - ON 結合条件が複数指定された場合は、自動で AND 結合される
        - ON 結合条件の書式は検索条件を参照
    - 'tablename\_to\_join alias' 部分は \[tablename, alias\] とすることも可能
        - こうすることで tablename 部分にサブクエリを指定できる
- WHERE で指定可能な条件: 検索条件単体、または AND か OR でラップされた複数の検索条件

    - 単体の検索条件
    - Sql::AND または Sql::OR をキーにもつ連想配列で、値は複数の検索条件を要素に持つ配列
- 検索条件: フィールド名をキーにもつ連想配列

    - \['field2' =&gt; \[Sql::OP\_NE =&gt; 'value2'\]\] // 値は比較演算子をキー比較する対象を値とする
    - \['field1' =&gt; 'value1'\] // 値が単一の値で比較演算子省略時はイコールで比較
- ソート条件: 以下のいずれかの文字列表現を要素に持つ配列

    - 'table.field \[ASC | DESC\]'
    - 'field \[ASC | DESC\]'
    - 'alias \[ASC | DESC\]'
- $opts オプション

```
[
    static::WITH_HIDDEN  => false|true,
    static::WITH_DELETED => false|true,
    static::FETCH_MODE   => PDO::FETCH_FUNC | PDO::FETCH_ASSOC | PDO::FETCH_CLASS,
    static::FOR_UPODATE  => false|true
]

```

### findById($data, ?array $opts=null, ?PDO $pdo=null)

[](#findbyiddata-array-optsnull-pdo-pdonull)

- $data プライマリキーと値の連想配列、クラスインスタンスのどちらか
- $opts, $pdo は find() と同様
- $opts の FETCH\_MODE を指定しなければ、モデルクラスのインスタンスを返す
- 結果が 1 件より大きい場合は例外送出、0 件の場合は null を返す

### findOne(array $params=\[\], ?array $opts=null, ?PDO $pdo=null)

[](#findonearray-params-array-optsnull-pdo-pdonull)

- $params 結果を一意に特定できる、フィールドと値の連想配列
    - Sql::WHERE は省略する
    - 複数条件の結合は AND のみとし Sql::AND キーも省略する
    - 複数の検索はそれぞれの配列に分割する必要なく、１つの連想配列にまとめる \['field1' =&gt; \[EQ =&gt; 'value1'\], 'field2' =&gt; \[EQ =&gt; 'value2'\]\]
- $opts, $pdo は find() と同様
- $opts の FETCH\_MODE を指定しなければ、モデルクラスのインスタンスを返す
- 結果が 1 件より大きい場合は例外送出、0 件の場合は null を返す

###  Health Score

29

—

LowBetter than 59% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 98.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~20 days

Recently: every ~39 days

Total

77

Last Release

825d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/bd728560169d88291000bced4fd1dddfa37d0c606a785ea2a4d6438488064008?d=identicon)[ittun55](/maintainers/ittun55)

---

Top Contributors

[![ittun55](https://avatars.githubusercontent.com/u/5767078?v=4)](https://github.com/ittun55 "ittun55 (87 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/burdock-php-datamodel/health.svg)

```
[![Health](https://phpackages.com/badges/burdock-php-datamodel/health.svg)](https://phpackages.com/packages/burdock-php-datamodel)
```

###  Alternatives

[doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.

9.7k578.4M5.6k](/packages/doctrine-dbal)[kimai/kimai

Kimai - Time Tracking

4.6k7.4k1](/packages/kimai-kimai)[cycle/database

DBAL, schema introspection, migration and pagination

64690.9k31](/packages/cycle-database)[guikingone/scheduler-bundle

A Symfony bundle that allows to schedule and create repetitive tasks

114217.4k](/packages/guikingone-scheduler-bundle)[symfony/ai-store

Low-level abstraction for storing and retrieving documents in a vector store.

19292.4k53](/packages/symfony-ai-store)[tommyknocker/pdo-database-class

Framework-agnostic PHP database library with unified API for MySQL, MariaDB, PostgreSQL, SQLite, MSSQL, and Oracle. Query Builder, caching, sharding, window functions, CTEs, JSON, migrations, ActiveRecord, CLI tools, AI-powered analysis. Zero external dependencies.

845.7k](/packages/tommyknocker-pdo-database-class)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
