burdock / php-datamodel
There is no license information available for the latest version (v0.2.49) of this package.
v0.2.49
2024-02-09 14:37 UTC
Requires
- ext-json: *
- ext-pdo: *
- burdock/php-config: ^0.2.1
- composer/composer: ^2.4
- iamcal/sql-parser: *
- psr/log: *
Requires (Dev)
- dev-master
- v0.2.49
- v0.2.48
- v0.2.47
- v0.2.46
- v0.2.45
- v0.2.44
- v0.2.43
- v0.2.42
- v0.2.41
- v0.2.40
- v0.2.39
- v0.2.38
- v0.2.37
- v0.2.36
- v0.2.35
- v0.2.34
- v0.2.33
- v0.2.32
- v0.2.31
- v0.2.30
- v0.2.29
- v0.2.28
- v0.2.27
- v0.2.26
- v0.2.25
- v0.2.24
- v0.2.23
- v0.2.22
- v0.2.21
- v0.2.20
- v0.2.19
- v0.2.18
- v0.2.17
- v0.2.16
- v0.2.15
- v0.2.14
- v0.2.13
- v0.2.12
- v0.2.11
- v0.2.10
- v0.2.9
- v0.2.8
- v0.2.7
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- v0.0.23
- v0.0.22
- v0.0.21
- v0.0.20
- v0.0.19
- v0.0.18
- v0.0.17
- v0.0.16
- v0.0.15
- v0.0.14
- v0.0.13
- v0.0.12
- v0.0.11
- v0.0.10
- v0.0.9
- v0.0.8
- v0.0.7
- v0.0.6
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
- dev-dependabot/composer/composer/composer-2.7.0
This package is auto-updated.
Last update: 2024-11-09 16:37:45 UTC
README
Features
データベース検索の各種条件を array 形式で指定できる ActiveRecord データモデル.
DataModel メソッド
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->__set(string $field, $value): void
- $model->set(string $key, $value): void
- $model->__get(string $field)
- $model->get($key, $default=null)
- $model->setData($data=null): void
- $model->getData($with_hidden=false): array
- $model->setDirtyField(string $field, $value): void
- $model->isDirty($fields=null): bool
- $model->convertData($data): array
- $model->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->insert(?PDO $pdo=null, $ignore=false): void
- $model->update(?PDO $pdo=null, bool $diff=false): self
- $model->delete(?bool $hard=false, ?PDO $pdo=null): self
ユーティリティ
- $model->convertJsonFields($data): array
- backupLoaded(): void
- getDiffs(): array
- getMsecDate(): string
- setDiffs(): void
DataModel プロパティ
- soft_delete_field : 指定されたフィールドを論理削除フィールドとして検索等行う
- json_fields : JSON に encode / decode するフィールドを指定
- 対象フィールドにデータをインスタンス保存時に自動で JSON シリアライズ化
- インスタンスプロパティまたは $model->get(), $model->getData() 経由でデータを取得すると自動で配列データに変換される
- find() 系メソッドで配列出力の場合は、JSON化されない. 必要な場合は Model::convertJsonFields($data) で変換可能。
- updated_at は値が設定されていなければ、自動で値を付与する
- 値が手動で設定された場合はその値で上書きする
find(array $params=[], ?array $opts=null, ?PDO $pdo=null)
- $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 条件を1つ以上含む配列
- ※※※ INNER または OUTER の JOIN 条件配列単体では動作せず、複数の JOIN 条件をラップする外側の配列が必要 ※※※
- Sql::INNER | Sql::OUTER => ['tablename_to_join alias', [ON 結合条件, ...]]
- ※※※ ON 結合条件単体では動作せず、複数の結合条件をラップする外側の配列が必要 ※※※
- ON 結合条件が複数指定された場合は、自動で AND 結合される
- ON 結合条件の書式は検索条件を参照
- 'tablename_to_join alias' 部分は [tablename, alias] とすることも可能
- こうすることで tablename 部分にサブクエリを指定できる
-
WHERE で指定可能な条件: 検索条件単体、または AND か OR でラップされた複数の検索条件
- 単体の検索条件
- Sql::AND または Sql::OR をキーにもつ連想配列で、値は複数の検索条件を要素に持つ配列
-
検索条件: フィールド名をキーにもつ連想配列
- ['field2' => [Sql::OP_NE => 'value2']] // 値は比較演算子をキー比較する対象を値とする
- ['field1' => '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)
- $data プライマリキーと値の連想配列、クラスインスタンスのどちらか
- $opts, $pdo は find() と同様
- $opts の FETCH_MODE を指定しなければ、モデルクラスのインスタンスを返す
- 結果が 1 件より大きい場合は例外送出、0 件の場合は null を返す
findOne(array $params=[], ?array $opts=null, ?PDO $pdo=null)
- $params 結果を一意に特定できる、フィールドと値の連想配列
- Sql::WHERE は省略する
- 複数条件の結合は AND のみとし Sql::AND キーも省略する
- 複数の検索はそれぞれの配列に分割する必要なく、1つの連想配列にまとめる ['field1' => [EQ => 'value1'], 'field2' => [EQ => 'value2']]
- $opts, $pdo は find() と同様
- $opts の FETCH_MODE を指定しなければ、モデルクラスのインスタンスを返す
- 結果が 1 件より大きい場合は例外送出、0 件の場合は null を返す