[N] ryunosuke\dbml\ 特定のクラスに依存しない全体仕様を以下に記す。

特定のクラスに依存しない全体仕様を以下に記す。

データベーススキーマ

まず大前提として別スキーマへのクエリは一切サポートしない ただし、 ryunosuke\dbml\Gateway\TableGatewayryunosuke\dbml\Query\SelectBuilder の話であり、 ryunosuke\dbml\Database::fetchArray() などで直接クエリを投げる場合はこの限りではない。

スキーマ情報はキャッシュに保存される。 このキャッシュは ryunosuke\dbml\Database::__construct() のオプションで指定する。 結構な勢いでスキーマを漁るので、何らかの永続キャッシュ(FilesystemCache や ApcuCache など)を使用したほうが良い。

テーブル記法

各クラスの各メソッドで引数名が $tableDescriptor となっているものは下記の記法を受け入れる(ryunosuke\dbml\Query\TableDescriptor から抜粋)。

base
'(joinsign)tablename(pkval)@scope:fkeyname[condition]<groupby>+order-by#offset-limit AS Alias.col1, col2 AS C2'
要素 必須 説明
joinsign 任意 JOIN する場合に結合方法を表す記号を置く('*':CROSS, '+':INNER, '<':LEFT, '>':RIGHT, '~':AUTO, ',':FROM)
tablename 必須 取得するテーブル名を指定する
(pkval) 任意 主キーの値を指定する
@scope 任意 対応する Gateway がありかつ scope というスコープが定義されているならそのスコープを当てる(複数可)
:fkeyname 任意 JOIN に使用する外部キー名を指定する
[condition] 任意 JOIN に使用する結合条件を yaml で指定する(where 記法)
condition 任意 JOIN に使用する結合条件を yaml で指定する(カラム結合)
<groupby> 任意 GROUP BY を指定する
+order-by 任意 ORDER BY を指定する
#offset-limit 任意 LIMIT, OFFSET を指定する
AS Alias 任意 テーブルエイリアスを指定する
.col1, col2 AS C2 任意 取得するカラムを指定する

上記を base としてさらに JOIN や子供行取得を含めると下記のようになる。

auto join
'base~base'
inner join
'base+base'
left join
'base<base'
subselect
'base/base'

この記法をテーブル記法と呼称する。 端的に言えば SQL の「SELECT 句」「FROM 句」「JOIN 句」「WHERE 句」「GROUP 句」「ORDER 句」「LIMIT 句」をすべてひっくるめて文字列で指定できるイメージである。

いくつかの例を以下に記す。

base

# tablename 以外の省略可能なものを省略した最もシンプルな例 $db->select('t_article'); // SELECT * FROM t_article # @scope でスコープを適用する例(t_article に active というスコープ(where: delete_flg=0)があることが前提) $db->select('t_article@active'); // SELECT * FROM t_article WHERE t_article.delete_flg = 0 # @scope を続けることで複数のスコープを当てられる(t_article に latest というスコープ(order: create_time DESC)があることが前提) $db->select('t_article@active@latest'); // SELECT * FROM t_article WHERE t_article.delete_flg = 0 ORDER BY t_article.create_time DESC # yaml 記法のハッシュの配列で複数条件を指定する(Database::whereInto と同じ) $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2]'); // SELECT * FROM t_article WHERE (t_article.delete_flg = 0) AND ((t_article.flag = 1) AND (t_article.flag2 < 2)) ORDER BY t_article.create_time DESC # (pkval) で主キーを指定する例 $db->select('t_article(1)'); // SELECT * FROM t_article WHERE article_id = 1 # #offset-limit で取得件数を指定する例 $db->select('t_article#40-60'); // SELECT * FROM t_article LIMIT 20 OFFSET 40 # AS alias でテーブルのエイリアスを指定する $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A'); // SELECT * FROM t_article AS A WHERE (A.delete_flg = 0) AND ((A.flag = 1) AND (A.flag2 < 2)) ORDER BY A.create_time DESC # .(ドット)以降で取得カラムを指定する $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A.article_id'); // SELECT A.article_id FROM t_article AS A WHERE (A.delete_flg = 0) AND ((A.flag = 1) AND (A.flag2 < 2)) ORDER BY A.create_time DESC # 取得カラムは,(カンマ)区切りで複数指定でき、エイリアスも指定できる $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A.article_id, title AS T'); // SELECT A.article_id, A.title AS T FROM t_article AS A WHERE (A.delete_flg = 0) AND ((A.flag = 1) AND (A.flag2 < 2)) ORDER BY A.create_time DESC

join

# :fkeyname で JOIN 時の外部キーを指定する(t_article と t_comment に fkeyAC: article_id があることが前提) $db->select('t_article<t_comment:fkeyAC'); $db->select('t_article<t_comment'); // 同じ。テーブル間外部キーが一つなら指定は省略できる // SELECT t_article.*, t_comment.* FROM t_article LEFT JOIN t_comment ON (t_comment.article_id = t_article.article_id) # [condition] で JOIN 時の結合条件を指定する(yaml の配列記法は where 的な動作になる) $db->select('t_article<t_comment[delete_flg=0]'); // SELECT t_article.*, t_comment.* FROM t_article LEFT JOIN t_comment ON (t_comment.article_id = t_article.article_id) AND (delete_flg=0) # 各テーブル要素には base の記法がほぼすべて使える $db->select('t_article@active[article_id=9] AS A.article_id+t_comment:fkeyAC AS C.comment'); // SELECT A.article_id, C.comment FROM t_article AS A INNER JOIN t_comment AS C ON (C.article_id = T.article_id) WHERE article_id=9

subselect

# 親子の階層で取得する $db->selectArray('t_article/t_comment'); // SELECT t_article.*, t_article.article_id FROM t_article // SELECT t_comment.comment_id AS comment_id, t_comment.* FROM t_comment WHERE t_comment.article_id IN ('1', '2', ...) # 各テーブル要素には base の記法がほぼすべて使える $db->selectArray('t_article@latest[delete_flg=0] AS A.article_id/t_comment AS C.comment'); // SELECT A.article_id FROM t_article AS A WHERE delete_flg=0 // SELECT C.comment_id AS __dbml_auto_pk, C.comment, C.article_id AS __dbml_auto_ck FROM t_comment AS C WHERE C.article_id IN ('1', '2', ...)

カラムの修飾はテーブルにエイリアスが貼られている場合はエイリアスで、無いならテーブル名で、と可能な限り正しく修飾される。 ただし、明示的に修飾されている場合は一切修飾を行わない。 素のカラム名が現れたときは直近のテーブル名(エイリアス)で修飾される。

ただし、構文解析などはしておらず、文字列ではパースに限界があるので、テーブル・カラムレベルでは配列でバラして指定することもできる。 実用上はこっちの指定の方がはるかに多い。

# base の最も複雑なものをバラして配列で指定する $db->select([ 't_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A' => [ 'article_id', 'T' => 'title', ], ]); // 右記と同じ: $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A.article_id, title AS T'); # join の最も複雑なものをバラして配列で指定する $db->select([ 't_article@active[article_id=9] AS A' => [ 'article_id', // JOIN 記号のあるキーはカラム取得ではなく JOIN と解釈される '+t_comment:fkeyAC AS C' => [ // このようにキーなしの配列を与えるとそれは ON 条件になる // ['on1' => 1, 'on2' => 2], 'comment', ], ], ]); // 右記と同じ: $db->select('t_article@active[article_id=9] AS A.article_id+t_comment:fkeyAC AS C.comment'); # subselect の最も複雑なものをバラして配列で指定する $db->selectArray([ 't_article@latest[delete_flg=0] AS A' => [ 'article_id', // JOIN 記号のないキーはカラム取得ではなく subselect と解釈される 't_comment AS C' => [ 'comment', ], ], ]); // 右記と同じ: $db->selectArray('t_article@latest[delete_flg=0] AS A.article_id/t_comment AS C.comment');

さらに、このような取得をするのであれば、実際には :fkeyname[condition] は 第2引数の $where で渡したほうが分かりやすい。 JOIN のときもテーブル記法として書くよりは上記のようにキーなしで php の構文として指定したほうがはるかにミスが少ない。 もっと単純ならそもそも $db->select ではなく Gateway で取得したほうが手っ取り早いこともある。 以下に例を記す。

# base の最も複雑なものを引数で指定する $db->select([ 't_article@active@latest A' => [ 'article_id', 'T' => 'title', ] ], [ 'flag2' => 1, 'flag2 < ?' => 2, ]); # base の最も複雑なものを Gateway で指定する $db->t_article->as('A')->scope('active latest')->column([ 'article_id', 'T' => 'title', ])->where([ 'flag2' => 1, 'flag2 < ?' => 2, ])->select(); // 2つとも右記と同じ: $db->select('t_article@active@latest[flag1: 1, "flag2 < ?": 2] AS A.article_id, title AS T'); # join の最も複雑なものを引数で指定する $db->select([ 't_article@active A' => [ 'article_id', '+t_comment C' => [ 'comment', ], ] ], [ 'article_id' => 9, ]); # join の最も複雑なものを Gateway で指定する $db->t_article->as('A')->scope('active')->column([ 'article_id', '+t_comment' => $db->t_comment->as('C')->foreign('fkeyAC')->column('comment'), ])->where([ 'article_id' => 9, ])->select(); // 2つとも右記と同じ: $db->select('t_article@active[article_id=9] AS A.article_id+t_comment:fkeyAC AS C.comment'); # subselect の最も複雑なものを引数で指定する $db->selectArray([ 't_article@latest A' => [ 'article_id', 't_comment C' => [ 'comment', ], ] ], [ 'delete_flg' => 0, ]); # subselect の最も複雑なものを Gateway で指定する $db->t_article->as('A')->scope('latest')->column([ 'article_id', 't_comment' => $db->t_comment->as('C')->column('comment'), ])->where([ 'delete_flg' => 0, ])->array(); // 2つとも右記と同じ: $db->selectArray('t_article@latest[delete_flg=0] AS A.article_id/t_comment AS C.comment');

ここまで来ると文字列ではなくほぼ php 構文になるのでかなり直感的になる。 テーブル記法については ryunosuke\dbml\Query\SelectBuilder::column()ryunosuke\dbml\Query\TableDescriptor にも記載があるのでそちらも参照。

テーブル名 ⇔ エンティティ名の自動変換

$db = new Database($connection, [ // テーブル名 <=> エンティティの変換を行うクロージャを指定する 'tableMapper' => function ($tablename) { $entityname = ucfirst(preg_replace('#^t_#', '', $tablename)); return [ // キーが単一のエンティティ名として使用され、要素として使用されるエンティティクラスやゲートウェイクラスを指定できる $entityname => [ 'entityClass' => 'vendor\\Entity\\' . $entityname, 'gatewayClass' => 'vendor\\Gateway\\' . $entityname, ], // 複数返しても良い。その場合「テーブル名 => エンティティ」が1対多の関係になる ]; }, // デフォルトのエンティティやゲートウェイを使うなら文字列を返しても良い 'tableMapper' => function ($tablename) { return ucfirst(preg_replace('#^t_#', '', $tablename)); }, ]);

このような設定を行うと、内部で「DB テーブル名 ⇔ エンティティクラス名」の相互変換を行うことができる。 これによって「"t_article" テーブルは php 内で "Article" として扱う」のようなことが可能になる。

この設定の効果として、具体的には下記のコードが等価になる。

$db->selectArray('Article.*'); $db->selectArray('t_article.*'); $db->insert('Article', $dataarray); $db->insert('t_article', $dataarray);

つまり、 SELECT 系クエリで引っ張るときに t_article は Article とみなされ、更新系クエリのときは Article は t_article とみなされるようになる。 結果的に「t_article テーブルから引っ張ったら自動で Article キーになってた」「Article キーで更新したら自動で t_article が更新されてた」という動作になる。 が、下記の制限から「アプリレイヤーによる自動エイリアス」と考えても差し支えない。端的に言えば「SQL レベルでエイリアスを明示しなくても "t_article" でも "Article" でもどっちでも認識する」ということになる。

変換は、変換前と変換後で決して同じ名前があってはならない。さらに、変換した結果が同じ文字列になるのも厳禁。 要するにエンティティ名 => テーブル名が曖昧になってはならない。

この機能はオンにしたところで「DB テーブル名 ⇔ エンティティクラス名の自動読み替え」程度の違いしか生まれず、その他の箇所にほとんど影響しない。 実装上、影響がある箇所は下記のみ。

影響箇所 説明
t_article で select すると キーが Article で返ってくる 単に返ってくるキーの違いであり、 自動でエンティティ化したりはしない。エンティティで欲しい場合は常に cast() を呼ぶ
t_ancestor.*** で取得する子供列がエンティティ名になる 上記の派生。テーブル名を指定できない以上、エンティティで返すしかないため
$qb->cast(null) するとエンティティインスタンスを返す ryunosuke\dbml\Query\SelectBuilder::cast() を参照
$db->Article が取得可能になる Article にあたるものは本来テーブル名だが、エンティティ名でも TableGateway が取得できるようになる

最後の項目について補足すると t_article ⇔ Article というマッピングが存在するとして、

  • $db->t_article
  • $db->Article

のどちらでも Gateway が得られるようになる。 メソッド体系などは全て同じだが、 array, tuple などの取得系メソッドの返り値の型が異なってくる。

  • $db->t_article->tuple('*', ['id' => 1]);
  • $db->Article->tuple('*', ['id' => 1]);

上はプレーンな配列で1行を返すが、下は エンティティインスタンスで1行を返す。 その「エンティティインスタンス」とは tableMapper で指定した完全修飾クラス名である。

テーブル名 ⇔ ビュー名の自動変換

tableMapper は前述に加えてテーブルとビューのマッピングも指定できる。

$db = new Database($connection, [ 'tableMapper' => function ($tablename) { $entityname = ucfirst(preg_replace('#^t_#', '', $tablename)); return [ $entityname => [ 'selectView' => preg_replace('#^t_#', 'v_', $tablename), ], ]; }, ]);

このような設定を行うと、内部で「ビュー名 ⇒ テーブル名」の自動変換が行われ、view は table の外部キーやインデックスを引き継ぐようになる。 これによって「取得時は view, 更新時は table」のようなことが透過的に可能になる。 さらに view は存在しなくてもよい。存在しない場合テーブル名が代理で使用される。

この設定の効果として、具体的には下記のようなコードが書ける。

// v_article と t_comment は外部キーで繋がっていないが、 t_article の外部キーで接続される $db->selectArray('v_article+t_comment'); // v_article は view なので本来更新できないが、t_article への insert と読み替えられる $db->insert('v_article', $dataarray);

つまり・・・ SELECT 系を実行するとき v_article は t_article の外部キーを引き継ぐため、あたかも t_article であるかのように JOIN できる。 AFFECT 系を実行するとき内部的には単純に t_article への更新とみなされる。

v_article に子テーブルの件数や exists などの SELECT, 論理削除などの WHERE を設定しておけば「便利な t_article」として使用できる。

外部キーの扱いについて

TableA ⇔ TableBのような相互参照外部キーの場合は例外が飛ぶ。 したがってそのような場合は外部キー自動指定はできず、明示的にカラムを指定する必要がある。 (これは安全性のため。外部キーの定義順で動作が異なるような現象は気づきにくいバグの温床になる)。

TableA ⇔ TableBのような相互参照外部キーは早々無いだろうが、今後外部キーが追加されることを考えてただ通るだけのテストでもいいので何かしらで担保したほうが良い。

また、外部キーによるリレーションは「辿れる限り辿る」実装になっている。 下記のようなテーブルがあると仮定する。

関連α tableA tableB tableC PK(auto) PK(auto) <----- FK PK(auto) <----- FK 関連β tableA tableB tableC PK1 <----- PK1 & FK <----- PK1 & FK PK2 <----- PK2 & FK PK3

関連αはいわゆる「サロゲートキー構成」で、関連βはいわゆる「ナチュラルキー構成」である。 関連αにおいて tableA と tableC に直接的な相関はない。相関を持たせるには必ず tableB を経由する必要がある。 一方、関連βは複合主キーがあり、 tableB を介さずとも tableA と tableC に関連がある、とみなすことができる。

この関連βのとき、 tableA と tableC は「外部キーによる相関がある」とみなされる。 つまり・・・

// 下記のコードを実行すると・・・ $db->tableA()->tableC()->array(); // 関連αの場合はエラー(tableA と tableC は相関がないので JOIN できない) // 関連βの場合は辿れる(SELECT tableA.*,tableC.* FROM tableA INNER JOIN tableC ON tableA.PK1 = tableC.PK1)

となる。 この機構は外部キーを見る箇所全てで有効である(join, subselect, subexists など)。

自動カラムキャスト

autoCastType オプションを設定すると DB の型を活かして Doctrine\DBAL\Types\Type で変換して取得する。

// 具体的にはソースのコメントを参考 $db->setAutoCastType([ // DATETIME 型は「取得時は変換」「更新時はそのまま」となるように設定 Type::DATETIME => [ 'select' => true, 'affect' => false, ], // SARRAY 型は「取得時も更新時も変換」となるように設定 Type::SIMPLE_ARRAY => true, ]); $row = $db->selectTuple('t_article', ['id' => 1]); // t_article に public_time: DATETIME が定義されているとすると・・・ var_dump($row['public_time']); // results: このようになぜか DateTime インスタンスで返してくれている class DateTime#2 (3) { public $date => string(26) "2017-12-07 21:42:56.000000" public $timezone_type => int(3) public $timezone => string(10) "Asia/Tokyo" } // t_article に public_option: SARRAY(実態は TEXT) が定義されているとすると・・・ var_dump($row['public_option']); // results: このようになぜか配列で返してくれている array(3) { [0] => string(2) "10" [1] => string(2) "30" [2] => string(2) "50" } // さらに SARRAY は更新時も有効なので・・・ $db->insert('t_article', [ 'article_id' => 1, 'public_option' => ['10', '30', '50'], ]); // このように insert に直接配列を突っ込むことができる(「Array to string conversion」などと怒られたりはしない)。

実際のところとんでもないほど強力な機能だが、その分パフォーマンスは劣化する(得られた全行全列に対して実行するので)。 また、 mysql のみ完全対応で、その他の DBMS はオマケのような位置付けになっている(一応それなりには動きはする)。 ただし、現在のところほぼグローバル設定で動作し、「テーブルごとに個別設定」のような動作は不可能。 これについては Gateway や Entity を利用して順次改善していく見込み。 (例えば Gateway のスコープに型情報を持たせたり、エンティティのフィールドの型でワイヤリングしたりなど)。

仮想カラム

ryunosuke\dbml\Database::overrideColumns() で「あたかもテーブルにあるかのように振る舞うカラム」を定義できる。

ありがちな例だが「姓」「名」を持つテーブルに対して overrideColumns(['usertable' => ['fullname' => Expression::new('CONCAT(sei, mei)')]]); すると、あたかもフルネームカラムがあるように振る舞わせることができる。 使用例などはメソッドを参照。

原則として仮想カラムを引っ張るためには明示的な指定が必要で、 *!ignore で引っ張ったとしても取得列に含まれることはない。 ただし追加するときに implicit を true にすると取得列に含まれるようになる(それでも * は不可)。 仮想カラムを含めた全てを取得したい場合は '!' とする(ryunosuke\dbml\Query\SelectBuilder::column() を参照)。

明示使用の場合でも今のところ select, where, having でのみ使用可能。 orderBy は select に含めて指定すれば実現できるし、having も mysql であれば(設定次第で)直接式を指定することができるので、実質的には select, where でのみの使用となることが多いはず。

拡張クラス

一部のクラスは ryunosuke\dbml\Mixin\FactoryTrait を use しており、これらのクラスは継承した拡張クラスで insteadof を呼ぶことでそのクラスが代わりに使われるようになる。

class MySelectBuilder extends SelectBuilder { public function hoge() { // something } } MySelectBuilder::insteadof(); // これをすると SelectBuilder の代わりに MySelectBuilder が使用されるようになる SelectBuilder::insteadof(MySelectBuilder::class); // これでもよい(一応こっちが本来の使い方) $db->select('t_table')->hoge(); // 呼べる

乱用は禁物だし、ドラスティックな変更はできないがちょっとした拡張ポイントのように使うことができる。 ただし、これで拡張した場合互換性担保の対称にならないため注意。

[C] Database データベースそのものを表すクラス

データベースそのものを表すクラス

すべての根幹となり、基本的に利用側はこのクラスのインスタンスしか利用しない(のが望ましい)。

インスタンス作成

# シングル環境 $dbconfig = [ 'driver' => 'pdo_mysql', 'host' => '127.0.0.1', 'port' => '3306', 'dbname' => 'dbname', 'user' => 'user', 'password' => 'password', 'charset' => 'utf8', ]; $db = new \ryunosuke\dbml\Database($dbconfig, []); # レプリケーション環境 $dbconfig = [ 'driver' => 'pdo_mysql', 'host' => ['master_host', 'slave_host'], 'port' => '3306', 'dbname' => 'dbname', 'user' => 'user', 'password' => ['master_password', 'slave_password'], 'charset' => 'utf8', ]; $db = new \ryunosuke\dbml\Database($dbconfig, []);

このようにして作成する。要するにコンストラクタの引数に \Doctrine\DBAL\DriverManager::getConnection と同じ配列を渡す。 要素を配列にした場合はそれぞれ個別の指定として扱われる。

詳細はコンストラクタを参照

コネクション(マスター/スレーブ)

上記のようにマスター/スレーブ構成用に接続を分けることができる。 マスターは更新系クエリ、スレーブは参照系クエリという風に自動で使い分けられる。 またトランザクション系(begin, commit, rollback)はマスター側で実行される(一応引数で分けることができる)。

マスター/スレーブモードは可能な限りマスターへ負荷をかけないような設計になっている。 つまり、テーブル定義の describe やデータベースバージョンの取得などは全てスレーブで行われ、マスターへは接続しない。 理想的な状況の場合(更新系クエリが一切ない場合)、マスターへは接続すらしない。 ただし、その弊害としてマスター・スレーブは完全に同じ RDBMS である必要がある。また、スキーマ情報に差異があると予想外の動きをする可能性がある。

補助メソッド

いくつかのメソッドは特定のサフィックスを付けることで異なる挙動を示すようになる。 内部処理が黒魔術的なので、呼ぼうとすると無理やり呼べたりするが、基本的にコード補完に出ないメソッドは使用しないこと(テストしてないから)。

InShare/ForUpdate

取得系メソッドに付与できる。 InShare を付与すると SELECT クエリに共有ロック構文が付与される(mysql なら LOCK IN SHARE MODE)。 ForUpdate を付与すると SELECT クエリに排他ロック構文が付与される(mysql なら FOR UPDATE)。

OrThrow

通常の更新系/取得系メソッドに付与できる。 作用行がなかったときに例外を投げたり、返り値として主キー配列を返すようになる。 これらの orThrow 系メソッドにより、「(詳細画面などで)行が見つからなかったら」「(何らかの原因により)行が insert されなかったら」の戻り値チェックを省くことができ、シンプルなコードを書くことができる。

メソッド 説明
insert などの行追加系 affected row が 0 の時に例外を投げる。更に戻り値として主キー配列を返す
update, delete などの行作用系 affected row が 0 の時に例外を投げる。更に戻り値として可能な限り主キー配列を返す(後述)
upsert などの行置換系 affected row が 0 の時に例外を投げる。更に戻り値として追加/更新した行の主キー配列を返す(ryunosuke\dbml\Database::upsert()参照)
fetchArray, fetchLists などの複数行を返す系 フェッチ行数が 0 の時に例外を投げる
fetchTuple などの単一行を返す系 行が見つからなかった時に例外を投げる
fetchValue などのスカラー値を返す系 行が見つからなかった時に例外を投げる。 PostgreSQL の場合やカラムキャストが有効な場合は注意

mysql の UPDATE は条件が一致しても値が変わらなければ affected rows として 0 を返すので OrThrow すると正常動作なのに例外を投げる、という事象が発生する。 この動作が望ましくない場合は PDO::MYSQL_ATTR_FOUND_ROWS = true を使用する。 ただし mysqli を用いる場合は PDO::MYSQL_ATTR_FOUND_ROWS = true と同等の結果になるように実装されている。

[update/delete]OrThrow の戻り値は主キーだが、複数行に作用した場合は未定義となる(['id' => 3] で update/delete した場合は 3 を返せるが、['create_at < ?' => '2011-12-34'] といった場合は返しようがないため)。 そもそも「更新/削除できなかったら例外」という挙動が必要なケースはほぼ無いためこれらの用途はほとんどなく、単に他のメソッドとの統一のために存在している。

AndPrimary

通常の更新系メソッドに付与できる。 返り値として主キー配列を返すようになる。 OrThrow と異なり作用行は見ないで常に主キーを返すため、「とりあえずザクザクと行を追加したい」のようなテストケースの作成などで有用。

AndBefore

INSERT 系以外の更新系メソッドに付与できる。 返り値として条件一致した更新前のレコード群を返すようになる。 履歴ログを取るようなケースで有用(もちろん実行前に能動的に SELECT しておくのでも構わない)。

エスケープ

識別子のエスケープは一切面倒をみない。外部入力を識別子にしたい(テーブル・カラムを外部指定するとか)場合は自前でエスケープすること。 値のエスケープに関しては基本的には安全側に倒しているが、 ryunosuke\dbml\Query\Expression\Expression を使用する場合はその前提が崩れる事がある( () を含むエントリは自動で Expression 化されるので同じ)。 原則的に外部入力を Expression 化したり、値以外の入力として使用するのは全く推奨できない。

Uses
type summary
DebugInfoTrait
OptionTrait オプションを保持し、get/set できるようにする trait
FetchMethodTrait
FetchOrThrowTrait
SelectMethodTrait
SelectOrThrowTrait
SelectInShareTrait
SelectForUpdateTrait
SelectForAffectTrait
EntityMethodTrait
EntityInShareTrait
EntityOrThrowTrait
EntityForUpdateTrait
EntityForAffectTrait
YieldTrait
ExportTrait
SelectAggregateTrait
AggregateTrait
SubSelectTrait
SubAggregateTrait
AffectOrThrowTrait
AffectAndPrimaryTrait
AffectAndBeforeTrait

[C] AUTO_KEY

public const string AUTO_KEY = "__dbml_auto_column"

[C] AUTO_PRIMARY_KEY

public const string AUTO_PRIMARY_KEY = "__dbml_auto_column_key"

[C] AUTO_PARENT_KEY

public const string AUTO_PARENT_KEY = "__dbml_auto_column_pk"

[C] AUTO_CHILD_KEY

public const string AUTO_CHILD_KEY = "__dbml_auto_column_ck"

[C] AUTO_DEPEND_KEY

public const string AUTO_DEPEND_KEY = "__dbml_auto_column_depend"

[C] METHOD_ARRAY

public const string METHOD_ARRAY = "array"

[C] METHOD_ASSOC

public const string METHOD_ASSOC = "assoc"

[C] METHOD_LISTS

public const string METHOD_LISTS = "lists"

[C] METHOD_PAIRS

public const string METHOD_PAIRS = "pairs"

[C] METHOD_TUPLE

public const string METHOD_TUPLE = "tuple"

[C] METHOD_VALUE

public const string METHOD_VALUE = "value"

[C] METHODS

public const array METHODS = [ "array" => [ "keyable" => false, "entity" => true, ], "assoc" => [ "keyable" => true, "entity" => true, ], "lists" => [ "keyable" => false, "entity" => false, ], "pairs" => [ "keyable" => true, "entity" => false, ], "tuple" => [ "keyable" => null, "entity" => true, ], "value" => [ "keyable" => null, "entity" => false, ], ]

[C] JOIN_MAPPER JOIN 記号のマッピング

JOIN 記号のマッピング
public const array JOIN_MAPPER = [ "AUTO" => "~", "INNER" => "+", "LEFT" => "<", "RIGHT" => ">", "CROSS" => "*", ]

[m] getDatabase

protected function getDatabase(): ryunosuke\dbml\Database
Return
type summary
Database

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override OptionTrait::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] __construct コンストラクタ

コンストラクタ
public function __construct( string|array|Doctrine\DBAL\Connection|Doctrine\DBAL\Connection[] $dbconfig, array $options = [] )

設定配列 or \Doctrine\DBAL\Connection を与えてインスタンスを生成する。 設定配列は \Doctrine\DBAL\DriverManager::getConnection に与える配列に準拠するが、いずれかの要素を配列にすると 0 がマスター、1 がスレーブとなる。 コネクションは配列で与えることができる。配列を与えた場合、 0 がマスター、1 がスレーブとなる。

基本的には配列を推奨する。コネクション指定は手元に \Doctrine\DBAL\Connection のインスタンスがあるなど、いかんともしがたい場合に使用する。

設定配列はドライバによって異なるが、 mysql で例を挙げると下記。

# mysql のよくありそうな例 $db = new Database([ 'driver' => 'pdo_mysql', 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'username', 'password' => 'password', 'dbname' => 'test_dbml', 'charset' => 'utf8', 'driverOptions' => [ \PDO::ATTR_EMULATE_PREPARES => false, \PDO::ATTR_STRINGIFY_FETCHES => false, ], ]);

いくつかのパターンを混じえた指定例は下記。

# 単純な配列を与えた場合(単一コネクション) $db = new Database([ 'driver' => 'pdo_mysql', 'host' => '127.0.0.1', 'port' => 3306, 'dbname' => 'example', ]); // mysql://127.0.0.1:3306/example の単一コネクションが生成される # 設定配列のいずれかの要素が配列の場合(マスター/スレーブ構成) $db = new Database([ 'driver' => 'pdo_mysql', 'host' => ['127.0.0.1', '127.0.0.2'], 'port' => [3306, 3307], 'dbname' => 'example', ]); // 下記の2コネクションが生成される(つまり、配列で複数指定したものは個別指定が活き、していないものは共通として扱われる) // - master: mysql://127.0.0.1:3306/example // - slave: mysql://127.0.0.2:3307/example # コネクションを与える場合 $db = new Database($connection); // 単一コネクションが使用される $db = new Database([$connection1, $connection2]); // $connection1 がマスター、$connection2 がスレーブとして使用される

第2引数のオプションは getDefaultOptions で与えるものを指定する。 基本的には未指定でもそれなりに動作するが、 cacheProvider だけは明示的に与えたほうが良い。

さらに、このクラスのオプションは少し特殊で、 ryunosuke\dbml\Query\SelectBuilderryunosuke\dbml\Gateway\TableGateway のオプションも複合で与えることができる。 その場合、そのクラスのインスタンスが生成されたときのデフォルト値として作用する。

# defaultOrder は本来 SelectBuilder のオプションだが、 Database のオプションとしても与えることができる $db = new Database($dbconfig, [ 'defaultOrder' => true, ]); $db->selectArray('tablename'); // 上記で false を設定してるので自動で `ORDER BY 主キー` は付かない

つまり実質的には「本ライブラリの設定が全て可能」となる。あまり「この設定はどこのクラスに係るのか?」は気にしなくて良い。

Parameter
type name summary
​string|​array|​Connection|​Connection[] $dbconfig 設定配列
​array $options = []

[m] __isset ゲートウェイオブジェクトがあるかを返す

ゲートウェイオブジェクトがあるかを返す
public function __isset(string $name): bool
Parameter
type name summary
​string $name
Return
type summary
​bool

[m] __unset ゲートウェイオブジェクトを伏せる

ゲートウェイオブジェクトを伏せる
public function __unset(string $name)
Parameter
type name summary
​string $name

[m] __get ゲートウェイオブジェクトを返す

ゲートウェイオブジェクトを返す
public function __get(string $name): ?ryunosuke\dbml\Gateway\TableGateway

テーブル名 or (設定されているなら)エンティティ名で ryunosuke\dbml\Gateway\TableGateway を取得する。

# t_article の全レコードを取得する $db->t_article->array();
Parameter
type name summary
​string $name
Return
type summary
​?TableGateway

[m] __set サポートされない

サポートされない
public function __set( string $name, mixed $value )

将来のために予約されており、呼ぶと無条件で例外を投げる。

phpstorm が $db->tablename[1]['title'] = 'hoge'; のような式で警告を出すのでそれを抑止する目的もある。

Parameter
type name summary
​string $name
​mixed $value

[m] debug 動作ログを取る

動作ログを取る
public function debug( callable|string $message, callable|array $context = [], callable|bool $if = true, $level = null )

生成コストも抑えたい(運用時は不要なので)ため、全ての引数は callable を受け付ける。

Parameter
type name summary
​callable|​string $message
​callable|​array $context = []
​callable|​bool $if = true
$level = null

[m] describe スキーマオブジェクトを返す

スキーマオブジェクトを返す
public function describe(?string $objectname = null): Doctrine\DBAL\Schema\AbstractAsset

「スキーマオブジェクト」とは \Doctrine\DBAL\Schema\Schema だけのことではなく、一般的な「スキーマオブジェクト」を表す。 (もっとも、それらのオブジェクトを返すので言うなれば「スキーマオブジェクトオブジェクト」か)。

返し得るオブジェクトは5種類。下記のサンプルを参照。

# \Doctrine\DBAL\Schema\Schema を返す $schema = $db->describe(); // 引数省略時は Schema オブジェクト # \Doctrine\DBAL\Schema\Table を返す $table = $db->describe('tablename'); // テーブル名を与えると Table オブジェクト $view = $db->describe('viewname'); // ビュー名を与えても Table オブジェクト # \Doctrine\DBAL\Schema\ForeignKeyConstraint を返す $fkey = $db->describe('fkeyname'); // 外部キー名を与えると ForeignKeyConstraint オブジェクト # \Doctrine\DBAL\Schema\Column を返す $column = $db->describe('tablename.columnname'); // テーブル名.カラム名を与えると Column オブジェクト # \Doctrine\DBAL\Schema\Index を返す $index = $db->describe('tablename.indexname'); // テーブル名.インデックス名を与えると Index オブジェクト

オブジェクト名が競合している場合は何が返ってくるか未定義。

Parameter
type name summary
​?string $objectname = null
Return
type summary
AbstractAsset

[m] echoTableClass 全テーブルの Gateway, Entity を出力する

全テーブルの Gateway, Entity を出力する
public function echoTableClass(string $annotation_namespace = ""): array

テーブル毎に各クラスを生成するのは面倒かつ単純作業なのでそれを自動化したもの。 無ければファイルごと作成し、有れば自動生成部分のみを書き換える。

出力場所は TableMapper に従う(つまり「あるべき場所」に出力され、現在のところそれを変更することはできない)。

Parameter
type name summary
​string $annotation_namespace = "" アノテーションの名前空間
Return
type summary
​array 追加:'+', 変更:'*', 削除:'-' の結果配列(「削除」とは実際に削除するわけではなく「管理外」程度の意味)

[m] echoAnnotation コード補完用のアノテーショントレイトを取得する

コード補完用のアノテーショントレイトを取得する
public function echoAnnotation( ?string $namespace = null, ?string $filename = null ): string

存在するテーブル名や tableMapper などを利用して mixin 用のトレイトを作成する。 このメソッドが吐き出したトレイトを @ mixin Hogera などとすると補完が効くようになる。

Parameter
type name summary
​?string $namespace = null
​?string $filename = null
Return
type summary
​string

[m] echoPhpStormMeta コード補完用の phpstorm.meta を取得する

コード補完用の phpstorm.meta を取得する
public function echoPhpStormMeta( ?string $namespace = null, ?string $filename = null ): string

存在するテーブル名や tableMapper などを利用して phpstorm.meta を作成する。

Parameter
type name summary
​?string $namespace = null
​?string $filename = null
Return
type summary
​string

[m] setLogger ロガーを設定する

ロガーを設定する
public function setLogger(Psr\Log\LoggerInterface|Psr\Log\LoggerInterface[]|null $logger): ryunosuke\dbml\Database

配列で 0, master を指定するとマスター接続に設定される。 同様に 1, slave を指定するとスレーブ接続に設定される。

単一のインスタンスを渡した場合は両方に設定される。

Parameter
type name summary
LoggerInterface|​LoggerInterface[]|​null $logger ロガー
Return
type summary
Database

[m] setAutoCastType カラムの型に応じた自動変換処理を登録する

カラムの型に応じた自動変換処理を登録する
public function setAutoCastType(array $castTypes): ryunosuke\dbml\Database

自動変換がなにかは dbml を参照。

$db->setAutoCastType([ // DATETIME 型は「取得時は変換」「更新時はそのまま」となるように設定 Type::DATETIME => [ 'select' => true, 'affect' => false, ], // SARRAY 型は「取得時も更新時も変換」となるように設定(単一 bool を与えると select,affect の両方を意味する) Type::SIMPLE_ARRAY => true, // STRING 型はクロージャで変換する Type::String => [ 'select' => function ($colval) { // $colval に SELECT 時の値が渡ってくる }, 'affect' => function ($colval) { // $colval に AFFECT 時の値が渡ってくる }, ], ]);
Parameter
type name summary
​array $castTypes
Return
type summary
Database

[m] setConnection 接続(Connection)を強制的に設定する

接続(Connection)を強制的に設定する
public function setConnection(Doctrine\DBAL\Connection|bool $connection): ryunosuke\dbml\Database

マスター/スレーブの切り替えにも使用する(bool 値を与えると切り替えとなる)。

// 接続をマスターに切り替える $db->setConnection(true); // 接続をスレーブに切り替える $db->setConnection(false); // 全く別個のコネクションに切り替える $db->setConnection($connection);
Parameter
type name summary
Connection|​bool $connection
Return
type summary
Database

[m] getConnection 現在のトランザクション接続(Connection)を返す

現在のトランザクション接続(Connection)を返す
public function getConnection(): Doctrine\DBAL\Connection

トランザクション接続とは基本的に「マスター接続」を指す。 シングルコネクション環境なら気にしなくて良い。

Return
type summary
Connection

[m] getMasterConnection マスター接続(Connection)を返す

マスター接続(Connection)を返す
public function getMasterConnection(): Doctrine\DBAL\Connection
Return
type summary
Connection

[m] getSlaveConnection スレーブ接続(Connection)を返す

スレーブ接続(Connection)を返す
public function getSlaveConnection(): Doctrine\DBAL\Connection
Return
type summary
Connection

[m] getConnections コネクション配列を返す

コネクション配列を返す
public function getConnections(): array|Doctrine\DBAL\Connection[]

単一だろうと Master/Slave 構成だろうとインスタンスとしての配列を返す。 例えばマスタースレーブが同じインスタンスの場合は1つしか返さない。

Return
type summary
​array|​Connection[] コネクション配列

[m] getCompatibleConnection 互換用コネクションを取得する

互換用コネクションを取得する
public function getCompatibleConnection(?Doctrine\DBAL\Connection $connection = null): ryunosuke\dbml\Metadata\CompatibleConnection
Parameter
type name summary
​?Connection $connection = null
Return
type summary
CompatibleConnection

[m] getPlatform dbal のプラットフォームを取得する

dbal のプラットフォームを取得する
public function getPlatform(): Doctrine\DBAL\Platforms\AbstractPlatform
Return
type summary
AbstractPlatform

[m] getCompatiblePlatform 互換用プラットフォームを取得する

互換用プラットフォームを取得する
public function getCompatiblePlatform(): ryunosuke\dbml\Metadata\CompatiblePlatform
Return
type summary
CompatiblePlatform

[m] getSchema スキーマオブジェクトを取得する

スキーマオブジェクトを取得する
public function getSchema(): ryunosuke\dbml\Metadata\Schema
Return
type summary
Schema

[m] getEntityClass テーブル名からエンティティクラス名を取得する

テーブル名からエンティティクラス名を取得する
public function getEntityClass(string $tablename): string
Parameter
type name summary
​string $tablename
Return
type summary
​string

[m] getGatewayClass テーブル名からゲートウェイクラス名を取得する

テーブル名からゲートウェイクラス名を取得する
public function getGatewayClass(string $tablename): string
Parameter
type name summary
​string $tablename
Return
type summary
​string

[m] convertEntityName テーブル名からエンティティ名へ変換する

テーブル名からエンティティ名へ変換する
public function convertEntityName(string $tablename): string
Parameter
type name summary
​string $tablename
Return
type summary
​string

[m] convertSelectTableName エンティティ・ビュー名から取得テーブル名へ変換する

エンティティ・ビュー名から取得テーブル名へ変換する
public function convertSelectTableName(string $targetname): string
Parameter
type name summary
​string $targetname
Return
type summary
​string

[m] convertAffectTableName エンティティ・ビュー名から更新テーブル名へ変換する

エンティティ・ビュー名から更新テーブル名へ変換する
public function convertAffectTableName(string $targetname): string
Parameter
type name summary
​string $targetname
Return
type summary
​string

[m] declareVirtualTable 仮想テーブルを宣言する

仮想テーブルを宣言する
public function declareVirtualTable( string $vtableName, array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Database

ryunosuke\dbml\Database::select() の引数に名前をつけて簡易に呼び出すことができる。 ややこしくなるので既に存在するテーブル名と同じものは登録できない。

# 仮想テーブルを追加する $db->declareVirtualTable('v_article_comment', [ 't_article@active' => [ '*', '*t_comment@active' => [ '*', ], ], ]); # 追加した仮想テーブルをあたかもテーブルのように使用できる $db->selectArray('v_article_comment'); // 上で追加した配列を与えるのと同じ
Parameter
type name summary
​string $vtableName
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
Database

[m] declareCommonTable CTE を宣言する

CTE を宣言する
public function declareCommonTable(array $expressions): ryunosuke\dbml\Database

ここで宣言された CTE は ryunosuke\dbml\Database::select() で使用されたときに自動的に WITH 句に追加されるようになる。 「共通的に VIEW 的なものを宣言し、後で使用できるようにする」といったイメージ。

$db->declareCommonTable([ 'c_table1' => 'SELECT 1, 2', 'c_table2(n)' => 'SELECT 1 UNION SELECT n + 1 FROM c_table2 WHERE n < 5', ]); # 追加した CTE は自動で WITH 句に追加される $db->selectArray('c_table2'); // WITH RECURSIVE c_table2(n) AS(SELECT 1 UNION SELECT n + 1 FROM c_table2 WHERE n < 5)SELECT c_table2.* FROM c_table2
Parameter
type name summary
​array $expressions
Return
type summary
Database

[m] getVirtualTable 仮想テーブルを取得する

仮想テーブルを取得する
public function getVirtualTable(string $vtableName): ?array

原則内部向け。

Parameter
type name summary
​string $vtableName
Return
type summary
​?array

[m] overrideColumns 仮想カラムを追加する

仮想カラムを追加する
public function overrideColumns(array $definition): ryunosuke\dbml\Database

ここで追加したカラムはあたかもテーブルにあるかのように select, where することができる。 仮想カラムは TableDescripter で使える記法すべてを使うことができる。

# 仮想カラムを追加する $db->overrideColumns([ 'table_name' => [ // 単純なエイリアス。ほぼ意味はない 'hoge' => 'fuga', // 姓・名を結合してフルネームとする(php 版) 'fullname1' => function($row) { return $v['sei'] . $v['mei']; }, // 姓・名の SQL 版 'fullname2' => 'CONCAT(sei, mei)', // 姓・名の SQL 版(修飾子) 'fullname3' => 'CONCAT(%1$s.sei, %1$s.mei)', // 上記の例は実は簡易指定で本来は下記の配列を渡す(非配列を渡すと下記でいう select が渡されたとみなす) 'misc' => [ 'select' => null, // select 時の仮想カラムの定義(文字列や Expression やクエリビルダなど全て使用できる) 'affect' => null, // affect 時の仮想カラムの定義(実列名をキーとする連想配列を返すクロージャを指定する) 'type' => null, // 仮想カラムの型 'lazy' => false, // 遅延評価するか(後述) 'implicit' => false, // !column などの一括取得に含めるか ], // null を渡すと仮想カラムの削除になる 'deletedVcolumn' => null, ], ]); # 追加した仮想カラムをあたかもテーブルカラムのように使用できる $db->selectArray('table_name' => [ 'hoge', 'fullname1', // php 的に文字列結合($v['sei'] . $v['mei'])する 'fullname2', // SQL 的に文字列結合(CONCAT(sei, mei))する 'fullname3', // 修飾子付きで SQL 的に文字列結合(CONCAT(AAA.sei, AAA.mei))する // さらにエイリアスも使用できる 'fullalias' => 'fullname1', ]);

'fullname3' について補足すると、 select が文字列であるとき、その実値は sprintf($select, 修飾子) となる。 仮想カラムはあらゆる箇所で使い回される想定なので、「その時のテーブル名・エイリアス(修飾子)」を決めることができない。 かと言って修飾子を付けないと曖昧なカラムエラーが出ることがある。 %1$s しておけば sprintf で「現在の修飾子」が埋め込まれるためある程度汎用的にできる。 ただし、その弊害として素の % を使うときは %% のようにエスケープする必要があるので注意。

lazy で指定する遅延評価について、例えば TableA が TableB のサブクエリを仮想カラムに設定し、TableB も TableA のサブクエリを設定している場合、即時評価だと場合によっては循環参照になってしまう or 仮想カラムが定義されていない状態でクエリビルダが走ってしまう、という事が起きる。 そんな時、 lazy: true とすることで仮想カラムの評価を実行時に遅延することができる。 また、Database を単一引数とするクロージャを select に渡すと暗黙的に lazy: true とすることができる。

# 仮想カラムの遅延評価 $db->overrideColumns([ 'tableA' => [ // このようにしないと $db->subselectArray('tableB') が即時評価され、 tableB の評価が始まってしまう(そのとき tableB に parent という仮想カラムはまだ生えていない) // つまり children の結果セットに parent が含まれることが無くなってしまう 'children' => [ 'lazy' => true, 'select' => function () use ($db) { return $db->subselectArray('tableB'); }, ], ], 'tableB' => [ // 同上(lazy 指定ではなく Database 引数版) 'parent' => function (Database $db) { return $db->subselectTuple('tableA'); }, ], ]);

affect にクロージャを指定すると insert/update 時にそのカラムが来た場合に他のカラム値に変換することができる。

# 仮想カラムの更新処理 $db->overrideColumns([ 'table_name' => [ 'fullname' => [ // 仮想カラム更新時の処理($value はその仮想カラムとして飛んできた値, $row は行全体) 'affect' => function ($value, $row) { // fullname が飛んできたらスペース区切りで姓・名に分割して登録する $parts = explode(' ', $value, 2); return [ 'sei' => $parts[0], 'mei' => $parts[1], ]; }, ], ], ]);

また、仮想といいつつも厳密には実際に定義されているカラムも指定可能。 これを利用するとカラムのメタ情報を上書きすることができる。

# 仮想ではなく実カラムを指定 $db->overrideColumns([ 'table_name' => [ 'checkd_option' => [ // checkd_option という実際に存在するカラムの型を simple_array に上書きできる 'type' => Type::getType('simple_array'), ], ], ]);

なお、実際のデータベース上の型が変わるわけではない。あくまで「php が思い込んでいる型」の上書きである。 php 側の型が活用される箇所はそう多くないが、例えば下記のような処理では上書きすると有用なことがある。

Parameter
type name summary
​array $definition
Return
type summary
Database

[m] addRelation 外部キーをまとめて追加する

外部キーをまとめて追加する
public function addRelation(array $relations): array

addForeignKey を複数呼ぶのとほぼ等しいが、遅延実行されて必要になったときに追加される。 options で onUpdate/Delete や条件付き外部キーとして condition が与えられる。 CASCADE・RESTRICT はアプリレイヤーで可能な限りエミュレーションされる。 condition を指定すると条件付き外部キーとなり、JOIN するときに暗黙的に条件が含まれるようになる(subselect 等も同様)。 これは「マスターテーブル」のようなごちゃまぜテーブルに対してテーブルごとの外部キーを張らざるを得ない状況を想定している。 condition は現在のところ文字列での指定しかできない。

# 下記のような配列を与える $db->addRelation([ 'ローカルテーブル名' => [ '外部テーブル名' => [ '外部キー名' => [ 'ローカルカラム名1' => '外部カラム名1', 'ローカルカラム名2' => '外部カラム名2', 'options' => [ 'onDelete' => 'CASCADE', // CASCADE 動作はアプリでエミュレーションされる 'condition' => ['colname' => 'cond value'], // join や subselect 時に自動付与される条件となる ], ], // 別キー名に対して上記の構造の繰り返しができる ], // 別外部テーブル名に対して上記の構造の繰り返しができる ], // 別ローカルテーブル名に対して上記の構造の繰り返しができる ]);
Parameter
type name summary
​array $relations
Return
type summary
​array

[m] addForeignKey 外部キーを追加する

外部キーを追加する
public function addForeignKey( string $localTable, string $foreignTable, array|string $fkdata, ?string $fkname = null ): Doctrine\DBAL\Schema\ForeignKeyConstraint

簡易性や ForeignKeyConstraint を隠蔽するために用意されている。 ForeignKeyConstraint 指定で追加する場合は ryunosuke\dbml\Metadata\Schema::addForeignKey() を呼ぶ。

Parameter
type name summary
​string $localTable
​string $foreignTable
​array|​string $fkdata
​?string $fkname = null
Return
type summary
ForeignKeyConstraint

[m] ignoreForeignKey 外部キーを無効にする

外部キーを無効にする
public function ignoreForeignKey( string $localTable, string $foreignTable, array|string $columnsMap ): Doctrine\DBAL\Schema\ForeignKeyConstraint

簡易性や ForeignKeyConstraint を隠蔽するために用意されている。 ForeignKeyConstraint 指定で無効にする場合は ryunosuke\dbml\Metadata\Schema::ignoreForeignKey() を呼ぶ。

Parameter
type name summary
​string $localTable
​string $foreignTable
​array|​string $columnsMap
Return
type summary
ForeignKeyConstraint

[m] switchForeignKey DBレイヤーの外部キー制約の有効無効を切り替える

DBレイヤーの外部キー制約の有効無効を切り替える
public function switchForeignKey( bool $enable, Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey ): int

RDBMS によっては制約単位で切り替えられるので、その場合は $fkey を指定する。

深い階層で enable -> enable -> disable ->disable した場合、最初の disable で解除されてしまうので、ネストレベルが管理される。 ネストレベルが 0 の時(本当に切り替わったとき)のみクエリは実行される。 さらにネストレベルは $fkey 指定時はそれぞれで管理される。

Parameter
type name summary
​bool $enable
ForeignKeyConstraint|​string $fkey
Return
type summary
​int

[m] begin begin

begin
public function begin(): int
Return
type summary
​int

[m] commit commit

commit
public function commit(): int
Return
type summary
​int

[m] rollback rollback

rollback
public function rollback(): int
Return
type summary
​int

[m] transact コールバックをトランザクションブロックで実行する

コールバックをトランザクションブロックで実行する
public function transact( callable $main, ?callable $catch = null, array $options = [], bool $throwable = true ): mixed

$options は ryunosuke\dbml\Transaction\Transaction を参照。

$throwable は catch で代替可能なので近い将来削除される。

// このクロージャ内の処理はトランザクション内で処理される $return = $db->transact(function ($db) { return $db->insertOrThrow('t_table', ['data array']); });
Parameter
type name summary
​callable $main
​?callable $catch = null
​array $options = []
​bool $throwable = true
Return
type summary
​mixed

[m] transaction トランザクションオブジェクトを返す

トランザクションオブジェクトを返す
public function transaction( ?callable $main = null, ?callable $catch = null, array $options = [] ): ryunosuke\dbml\Transaction\Transaction

$options は ryunosuke\dbml\Transaction\Transaction を参照。

Parameter
type name summary
​?callable $main = null
​?callable $catch = null
​array $options = []
Return
type summary
Transaction

[m] preview トランザクションをプレビューする(実行クエリを返す)

トランザクションをプレビューする(実行クエリを返す)
public function preview( callable $main, ?array $options = null ): array

$options は ryunosuke\dbml\Transaction\Transaction を参照。

この処理は「実際にクエリを投げてロールバックしてログを取る」という機構で実装されている。 つまり、トランザクション未対応の RDBMS だと実際にクエリが実行されるし、RDBMS 管轄外の事を行っても無かったことにはならない。 RDBMS によっては連番が飛ぶかもしれない。

あくまで、開発のサポート(「このメソッドを呼ぶとどうなるんだろう/どういうクエリが投げられるんだろう」など)に留めるべきである。

// $logs に実際に投げたクエリが格納される。 $logs = $db->preview(function ($db) { $pk = $db->insertOrThrow('t_table', ['data array']); $db->update('t_table', ['data array'], $pk); });
Parameter
type name summary
​callable $main
​?array $options = null
Return
type summary
​array

[m] raw new ryunosuke\dbml\Query\Expression\Expression するだけのメソッド

new ryunosuke\dbml\Query\Expression\Expression するだけのメソッド
public function raw( string $expr, mixed $params = [] ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $expr
​mixed $params = []
Return
type summary
Expression

[m] operator 引数内では AND、引数間では OR する Expression を返す

引数内では AND、引数間では OR する Expression を返す
public function operator(...$predicates): ryunosuke\dbml\Query\Expression\Expression

得られる結果としては ryunosuke\dbml\Query\SelectBuilder::where()とほぼ同じ。 ただし、あちらはクエリビルダで WHERE 専用であるのに対し、こちらは Expression を返すだけなので SELECT 句に埋め込むことができる。

$db->select([ 't_article' => [ 'contain_hoge' => $db->operator(['article_title:%LIKE%' => 'hoge']), ], ]); // SELECT (article_title LIKE ?) AS contain_hoge FROM t_article: ['%hoge%'] $db->select([ 't_article' => [ 'contain_misc' => $db->operator([ 'colA' => 1, 'colB' => 2, ], [ 'colC' => 3, 'colD' => 4, [ 'colE1' => 5, 'colE2' => 6, ] ]), ], ]); // SELECT (((colA = ?) AND (colB = ?)) OR ((colC = ?) AND (colD = ?) AND ((colE1 = ?) OR (colE2 = ?)))) AS contain_misc FROM t_article: [1, 2, 3, 4, 5, 6]
Parameter
type name summary
...$predicates
Return
type summary
Expression

[m] descriptor 文字列とパラメータから TableDescriptor を生成する

文字列とパラメータから TableDescriptor を生成する
public function descriptor( string $tableDescriptor, array $params = [] ): ryunosuke\dbml\Query\TableDescriptor
Parameter
type name summary
​string $tableDescriptor
​array $params = []
Return
type summary
TableDescriptor

[m] binder 値を保持しつつプレースホルダーを返すオブジェクトを返す

値を保持しつつプレースホルダーを返すオブジェクトを返す
public function binder(): \ArrayObject|callable
$binder = $db->binder(); // このようにすると値を保持しつつプレースホルダー文字列を返す $sql = "SELECT * FROM t_table WHERE id IN ({$binder([1, 2, 3])}) AND status = {$binder(1)}"; // $binder はそのままパラメータとして使える $db->fetchAll($sql, $binder); // prepare: SELECT * FROM t_table WHERE id IN (?, ?, ?) AND status = ? // execute: SELECT * FROM t_table WHERE id IN (1, 2, 3) AND status = 1
Return
type summary
ArrayObject|​callable

[m] quote 値をクオートする

値をクオートする
public function quote( mixed $value, ?int $type = null ): mixed

null を quote すると '' ではなく NULL になる。 bool を quote すると文字ではなく int になる。

それ以外は Doctrine\DBAL\Connection::quote() と同じ。

Parameter
type name summary
​mixed $value
​?int $type = null
Return
type summary
​mixed

[m] quoteIdentifier 識別子をクオートする

識別子をクオートする
public function quoteIdentifier(string $identifier): string
Parameter
type name summary
​string $identifier
Return
type summary
​string

[m] queryInto SQL とパラメータを指定してクエリを構築する

SQL とパラメータを指定してクエリを構築する
public function queryInto( ryunosuke\dbml\Query\Queryable|string $sql, iterable $params = [] ): string
# 素の文字列 $db->queryInto('SELECT ?', ['xxx']); // SELECT 'xxx' # Expression を与えると保持しているパラメータが使用される $db->queryInto(Expression::new('UPPER(?)', ['yyy'])); // UPPER('yyy') # Expression というか Queryable 全般がそうなる $db->queryInto($db->select('tablename', ['id' => 1])); // (SELECT tablename.* FROM tablename WHERE id = '1')
Parameter
type name summary
Queryable|​string $sql
​iterable $params = []
Return
type summary
​string

[m] warmup 暖気運転を行う

暖気運転を行う
public function warmup(array|string $table_names = []): array

指定テーブルのすべてのインデックスに対して COUNT クエリを発行する。 RDBMS にも依るが、これによって・・・

  • レコードがバッファプールに乗る(クラスタードインデックスの場合)
  • インデックスがバッファプールに乗る

概して mysql (InnoDB) 用だが、他の RDBMS でも呼んで無駄にはならないはず。 返り値として暖気クエリの結果(現在は [table => [index => COUNT]] を返すが、COUNt 部分は変更されることがある)

Parameter
type name summary
​array|​string $table_names = []
Return
type summary
​array

[m] fetch フェッチメソッドとクエリとパラメータを指定して実行する

フェッチメソッドとクエリとパラメータを指定して実行する
public function fetch( string $method, $sql, iterable $params = [] )
Parameter
type name summary
​string $method
$sql
​iterable $params = []

[m] fetchArray レコードの配列を返す

レコードの配列を返す
public function fetchArray( $sql, iterable $params = [] )
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchArrayWithSql() レコードの配列を返す

[m] fetchAssoc レコードの連想配列を返す

レコードの連想配列を返す
public function fetchAssoc( $sql, iterable $params = [] )
$db->fetchAssoc('SELECT id, name FROM tablename'); // results: [ 1 => [ 'id' => 1, 'name' => 'name1', ], 2 => [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchAssocWithSql() レコードの連想配列を返す

[m] fetchLists レコード[1列目]の配列を返す

レコード[1列目]の配列を返す
public function fetchLists( $sql, iterable $params = [] )
$db->fetchLists('SELECT name FROM tablename'); // results: [ 'name1', 'name2', ];
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchListsWithSql() レコード[1列目]の配列を返す

[m] fetchPairs レコード[1列目=>2列目]の連想配列を返す

レコード[1列目=>2列目]の連想配列を返す
public function fetchPairs( $sql, iterable $params = [] )
$db->fetchPairs('SELECT id, name FROM tablename'); // results: [ 1 => 'name1', 2 => 'name2', ];
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchPairsWithSql() レコード[1列目=>2列目]の連想配列を返す

[m] fetchTuple レコードを返す

レコードを返す
public function fetchTuple( $sql, iterable $params = [] )

このメソッドはフェッチ結果が2件以上だと例外を投げる これは

のを予防的に阻止するため必要な仕様である。

$db->fetchTuple('SELECT id, name FROM tablename LIMIT 1'); // results: [ 'id' => 1, 'name' => 'name1', ];
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchTupleWithSql() レコードを返す

[m] fetchValue レコード[1列目]を返す

レコード[1列目]を返す
public function fetchValue( $sql, iterable $params = [] )

このメソッドはフェッチ結果が2件以上だと例外を投げる これは

のを予防的に阻止するために必要な仕様である。

$db->fetchValue('SELECT name FROM tablename LIMIT 1'); // results: 'name1';
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchValueWithSql() レコード[1列目]を返す

[m] fetchArrayOrThrow ryunosuke\dbml\Database::fetchArray()") の例外送出版

ryunosuke\dbml\Database::fetchArray() の例外送出版
public function fetchArrayOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchArrayOrThrowWithSql() ryunosuke\dbml\Database::fetchArray()") の例外送出版

[m] fetchAssocOrThrow ryunosuke\dbml\Database::fetchAssoc()") の例外送出版

ryunosuke\dbml\Database::fetchAssoc() の例外送出版
public function fetchAssocOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchAssocOrThrowWithSql() ryunosuke\dbml\Database::fetchAssoc()") の例外送出版

[m] fetchListsOrThrow ryunosuke\dbml\Database::fetchLists()") の例外送出版

ryunosuke\dbml\Database::fetchLists() の例外送出版
public function fetchListsOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchListsOrThrowWithSql() ryunosuke\dbml\Database::fetchLists()") の例外送出版

[m] fetchPairsOrThrow ryunosuke\dbml\Database::fetchPairs()") の例外送出版

ryunosuke\dbml\Database::fetchPairs() の例外送出版
public function fetchPairsOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchPairsOrThrowWithSql() ryunosuke\dbml\Database::fetchPairs()") の例外送出版

[m] fetchTupleOrThrow ryunosuke\dbml\Database::fetchTuple()") の例外送出版

ryunosuke\dbml\Database::fetchTuple() の例外送出版
public function fetchTupleOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchTupleOrThrowWithSql() ryunosuke\dbml\Database::fetchTuple()") の例外送出版

[m] fetchValueOrThrow ryunosuke\dbml\Database::fetchValue()") の例外送出版

ryunosuke\dbml\Database::fetchValue() の例外送出版
public function fetchValueOrThrow( $sql, iterable $params = [] )
Parameter
type name summary
$sql
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchValueOrThrowWithSql() ryunosuke\dbml\Database::fetchValue()") の例外送出版

[m] fetchOrThrow

public function fetchOrThrow( string $method, $sql, iterable $params = [] )
Parameter
type name summary
​string $method
$sql
​iterable $params = []

[m] select 各句を指定してクエリビルダを生成する

各句を指定してクエリビルダを生成する
public function select( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
// 単純にクエリビルダオブジェクトを取得する $qb = $db->select('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // array/assoc などのプロキシメソッドで直接結果を取得する $results = $db->selectArray('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchArray と同じ $results = $db->selectAssoc('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchAssoc と同じ $results = $db->selectLists('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchLists と同じ $results = $db->selectPairs('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchPairs と同じ $results = $db->selectTuple('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchTuple と同じ $results = $db->selectValue('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // 結果形式は fetchValue と同じ

$tableDescriptor, $where はかなり多彩な指定が可能。下記のメソッドも参照。

Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] selectArray レコード群を配列で返す(ryunosuke\dbml\Database::fetchArray()") も参照)

レコード群を配列で返す(ryunosuke\dbml\Database::fetchArray() も参照)
public function selectArray( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectArray() レコード群を配列で返す(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] selectArrayOrThrow ryunosuke\dbml\Database::selectArray()") の例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の例外送出版(ryunosuke\dbml\Database::fetchArray() も参照)
public function selectArrayOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectArrayOrThrow() ryunosuke\dbml\Database::selectArray()") の例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] selectArrayInShare ryunosuke\dbml\Database::selectArray()") の共有ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の共有ロック版(ryunosuke\dbml\Database::fetchArray() も参照)
public function selectArrayInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectArrayInShare() ryunosuke\dbml\Database::selectArray()") の共有ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] selectArrayForUpdate ryunosuke\dbml\Database::selectArray()") の排他ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の排他ロック版(ryunosuke\dbml\Database::fetchArray() も参照)
public function selectArrayForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectArrayForUpdate() ryunosuke\dbml\Database::selectArray()") の排他ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] selectArrayForAffect ryunosuke\dbml\Database::selectArray()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray() も参照)
public function selectArrayForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectArrayForAffect() ryunosuke\dbml\Database::selectArray()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] selectAssoc レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function selectAssoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectAssoc() レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] selectAssocOrThrow ryunosuke\dbml\Database::selectAssoc()") の例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の例外送出版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function selectAssocOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectAssocOrThrow() ryunosuke\dbml\Database::selectAssoc()") の例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] selectAssocInShare ryunosuke\dbml\Database::selectAssoc()") の共有ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の共有ロック版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function selectAssocInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectAssocInShare() ryunosuke\dbml\Database::selectAssoc()") の共有ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] selectAssocForUpdate ryunosuke\dbml\Database::selectAssoc()") の排他ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の排他ロック版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function selectAssocForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectAssocForUpdate() ryunosuke\dbml\Database::selectAssoc()") の排他ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] selectAssocForAffect ryunosuke\dbml\Database::selectAssoc()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function selectAssocForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectAssocForAffect() ryunosuke\dbml\Database::selectAssoc()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] selectLists レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists()") も参照)

レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists() も参照)
public function selectLists( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectLists() レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] selectListsOrThrow ryunosuke\dbml\Database::selectLists()") の例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の例外送出版(ryunosuke\dbml\Database::fetchLists() も参照)
public function selectListsOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectListsOrThrow() ryunosuke\dbml\Database::selectLists()") の例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] selectListsInShare ryunosuke\dbml\Database::selectLists()") の共有ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の共有ロック版(ryunosuke\dbml\Database::fetchLists() も参照)
public function selectListsInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectListsInShare() ryunosuke\dbml\Database::selectLists()") の共有ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] selectListsForUpdate ryunosuke\dbml\Database::selectLists()") の排他ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の排他ロック版(ryunosuke\dbml\Database::fetchLists() も参照)
public function selectListsForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectListsForUpdate() ryunosuke\dbml\Database::selectLists()") の排他ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] selectListsForAffect ryunosuke\dbml\Database::selectLists()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists() も参照)
public function selectListsForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectListsForAffect() ryunosuke\dbml\Database::selectLists()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] selectPairs レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs()") も参照)

レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs() も参照)
public function selectPairs( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectPairs() レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] selectPairsOrThrow ryunosuke\dbml\Database::selectPairs()") の例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の例外送出版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function selectPairsOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectPairsOrThrow() ryunosuke\dbml\Database::selectPairs()") の例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] selectPairsInShare ryunosuke\dbml\Database::selectPairs()") の共有ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の共有ロック版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function selectPairsInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectPairsInShare() ryunosuke\dbml\Database::selectPairs()") の共有ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] selectPairsForUpdate ryunosuke\dbml\Database::selectPairs()") の排他ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の排他ロック版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function selectPairsForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectPairsForUpdate() ryunosuke\dbml\Database::selectPairs()") の排他ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] selectPairsForAffect ryunosuke\dbml\Database::selectPairs()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function selectPairsForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectPairsForAffect() ryunosuke\dbml\Database::selectPairs()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] selectTuple レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple() も参照)
public function selectTuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectTuple() レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] selectTupleOrThrow ryunosuke\dbml\Database::selectTuple()") の例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の例外送出版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function selectTupleOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectTupleOrThrow() ryunosuke\dbml\Database::selectTuple()") の例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] selectTupleInShare ryunosuke\dbml\Database::selectTuple()") の共有ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の共有ロック版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function selectTupleInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectTupleInShare() ryunosuke\dbml\Database::selectTuple()") の共有ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] selectTupleForUpdate ryunosuke\dbml\Database::selectTuple()") の排他ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の排他ロック版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function selectTupleForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectTupleForUpdate() ryunosuke\dbml\Database::selectTuple()") の排他ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] selectTupleForAffect ryunosuke\dbml\Database::selectTuple()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function selectTupleForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectTupleForAffect() ryunosuke\dbml\Database::selectTuple()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] selectValue カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue()") も参照)

カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue() も参照)
public function selectValue( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectValue() カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] selectValueOrThrow ryunosuke\dbml\Database::selectValue()") の例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の例外送出版(ryunosuke\dbml\Database::fetchValue() も参照)
public function selectValueOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectValueOrThrow() ryunosuke\dbml\Database::selectValue()") の例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] selectValueInShare ryunosuke\dbml\Database::selectValue()") の共有ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の共有ロック版(ryunosuke\dbml\Database::fetchValue() も参照)
public function selectValueInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectValueInShare() ryunosuke\dbml\Database::selectValue()") の共有ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] selectValueForUpdate ryunosuke\dbml\Database::selectValue()") の排他ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の排他ロック版(ryunosuke\dbml\Database::fetchValue() も参照)
public function selectValueForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectValueForUpdate() ryunosuke\dbml\Database::selectValue()") の排他ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] selectValueForAffect ryunosuke\dbml\Database::selectValue()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue() も参照)
public function selectValueForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectValueForAffect() ryunosuke\dbml\Database::selectValue()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] entity 各句を指定してエンティティ用クエリビルダを生成する

各句を指定してエンティティ用クエリビルダを生成する
public function entity( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

エンティティクラスは駆動表で決まる。

// 単純にクエリビルダオブジェクトを取得する $qb = $db->entity('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // array/assoc などのプロキシメソッドで直接結果を取得する $results = $db->entityArray('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // エンティティインスタンスの配列を返す $results = $db->entityAssoc('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // エンティティインスタンスの連想配列(キーは最初のカラム)を返す $results = $db->entityTuple('tablename', ['create_date < ?' => '2000-12-23 12:34:56']); // エンティティインスタンスを返す

$tableDescriptor, $where はかなり多彩な指定が可能。下記のメソッドも参照。

Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityArray エンティティ群を配列で返す(ryunosuke\dbml\Database::fetchArray()") も参照)

エンティティ群を配列で返す(ryunosuke\dbml\Database::fetchArray() も参照)
public function entityArray( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityMethodTrait::entityArray() エンティティ群を配列で返す(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] entityArrayOrThrow ryunosuke\dbml\Database::entityArray()") の例外送出版

ryunosuke\dbml\Database::entityArray() の例外送出版
public function entityArrayOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityOrThrowTrait::entityArrayOrThrow() ryunosuke\dbml\Database::entityArray()") の例外送出版

[m] entityArrayInShare ryunosuke\dbml\Database::entityArray()") の共有ロック版

ryunosuke\dbml\Database::entityArray() の共有ロック版
public function entityArrayInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityInShareTrait::entityArrayInShare() ryunosuke\dbml\Database::entityArray()") の共有ロック版

[m] entityArrayForUpdate ryunosuke\dbml\Database::entityArray()") の排他ロック版

ryunosuke\dbml\Database::entityArray() の排他ロック版
public function entityArrayForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForUpdateTrait::entityArrayForUpdate() ryunosuke\dbml\Database::entityArray()") の排他ロック版

[m] entityArrayForAffect ryunosuke\dbml\Database::entityArray()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityArray() の排他ロック兼例外送出版
public function entityArrayForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForAffectTrait::entityArrayForAffect() ryunosuke\dbml\Database::entityArray()") の排他ロック兼例外送出版

[m] entityAssoc エンティティ群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

エンティティ群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function entityAssoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityMethodTrait::entityAssoc() エンティティ群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] entityAssocOrThrow ryunosuke\dbml\Database::entityAssoc()") の例外送出版

ryunosuke\dbml\Database::entityAssoc() の例外送出版
public function entityAssocOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityOrThrowTrait::entityAssocOrThrow() ryunosuke\dbml\Database::entityAssoc()") の例外送出版

[m] entityAssocInShare ryunosuke\dbml\Database::entityAssoc()") の共有ロック版

ryunosuke\dbml\Database::entityAssoc() の共有ロック版
public function entityAssocInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityInShareTrait::entityAssocInShare() ryunosuke\dbml\Database::entityAssoc()") の共有ロック版

[m] entityAssocForUpdate ryunosuke\dbml\Database::entityAssoc()") の排他ロック版

ryunosuke\dbml\Database::entityAssoc() の排他ロック版
public function entityAssocForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForUpdateTrait::entityAssocForUpdate() ryunosuke\dbml\Database::entityAssoc()") の排他ロック版

[m] entityAssocForAffect ryunosuke\dbml\Database::entityAssoc()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityAssoc() の排他ロック兼例外送出版
public function entityAssocForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForAffectTrait::entityAssocForAffect() ryunosuke\dbml\Database::entityAssoc()") の排他ロック兼例外送出版

[m] entityTuple エンティティをオブジェクトで返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

エンティティをオブジェクトで返す(ryunosuke\dbml\Database::fetchTuple() も参照)
public function entityTuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityMethodTrait::entityTuple() エンティティをオブジェクトで返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] entityTupleOrThrow ryunosuke\dbml\Database::entityTuple()") の例外送出版

ryunosuke\dbml\Database::entityTuple() の例外送出版
public function entityTupleOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityOrThrowTrait::entityTupleOrThrow() ryunosuke\dbml\Database::entityTuple()") の例外送出版

[m] entityTupleInShare ryunosuke\dbml\Database::entityTuple()") の共有ロック版

ryunosuke\dbml\Database::entityTuple() の共有ロック版
public function entityTupleInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityInShareTrait::entityTupleInShare() ryunosuke\dbml\Database::entityTuple()") の共有ロック版

[m] entityTupleForUpdate ryunosuke\dbml\Database::entityTuple()") の排他ロック版

ryunosuke\dbml\Database::entityTuple() の排他ロック版
public function entityTupleForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForUpdateTrait::entityTupleForUpdate() ryunosuke\dbml\Database::entityTuple()") の排他ロック版

[m] entityTupleForAffect ryunosuke\dbml\Database::entityTuple()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityTuple() の排他ロック兼例外送出版
public function entityTupleForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead EntityForAffectTrait::entityTupleForAffect() ryunosuke\dbml\Database::entityTuple()") の排他ロック兼例外送出版

[m] selectAggregate 集約クエリビルダを返す

集約クエリビルダを返す
public function selectAggregate( string|array $aggregation, array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

ryunosuke\dbml\Database::selectCount() などのために存在し、明示的に呼ぶことはほとんど無い。

// SELECT COUNT(group_id) FROM t_table $db->selectCount('t_table.group_id'); // SELECT MAX(id) FROM t_table WHERE delete_flg = 0 GROUP BY group_id $db->selectMax('t_table.id', ['delete_flg' => 0], 'group_id');
Parameter
type name summary
​string|​array $aggregation 集約関数名
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectExists EXISTS クエリビルダを返す

EXISTS クエリビルダを返す
public function selectExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
// EXISTS (SELECT * FROM t_table) $db->selectExists('t_table'); // NOT EXISTS (SELECT * FROM t_table WHERE delete_flg = 0) $db->selectNotExists('t_table', ['delete_flg' => 0]);
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder EXISTS クエリビルダ
Prototype
kind source summary
​instead SelectAggregateTrait::selectExists() EXISTS クエリビルダを返す

[m] selectNotExists ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists()") の NOT 版

ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists() の NOT 版
public function selectNotExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder NOT EXISTS クエリビルダ
Prototype
kind source summary
​instead SelectAggregateTrait::selectNotExists() ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists()") の NOT 版

[m] selectCount COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectCount( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectCount() COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectMin MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMin( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMin() MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectMax MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMax( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMax() MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectSum SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectSum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectSum() SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectAvg AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectAvg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectAvg() AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectMedian MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMedian( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMedian() MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectJson JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectJson( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectJson() JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] yield 行を少しずつ返してくれるオブジェクトを返す

行を少しずつ返してくれるオブジェクトを返す
public function yield( $sql, iterable $params = [] ): ryunosuke\dbml\Generator\Yielder

返却されたオブジェクトは foreach で回すことができ、かつ PDO::fetch で実装されていて省メモリで動作する。 さらにいくつか特殊な事ができるが ryunosuke\dbml\Generator\Yielder::setBufferMode(), ryunosuke\dbml\Generator\Yielder::setEmulationUnique() あたりを参照。

# シンプルな例 foreach ($db->yieldArray('SELECT * FROM very_many_heavy_table') as $row) { // 一気に取得ではなく、逐次処理ができる } # クエリビルダも渡せる foreach ($db->yieldArray($db->select('very_many_heavy_table')) as $row) { // 一気に取得ではなく、逐次処理ができる }
Parameter
type name summary
$sql
​iterable $params = []
Return
type summary
Yielder

[m] yieldArray レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)

レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray() を参照)
public function yieldArray( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldArray() レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)

[m] yieldAssoc レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc()") を参照)

レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc() を参照)
public function yieldAssoc( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldAssoc() レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc()") を参照)

[m] yieldLists レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists()") を参照)

レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists() を参照)
public function yieldLists( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldLists() レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists()") を参照)

[m] yieldPairs レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs()") を参照)

レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs() を参照)
public function yieldPairs( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldPairs() レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs()") を参照)

[m] export テーブルレコードをエクスポートする

テーブルレコードをエクスポートする
public function export( ryunosuke\dbml\Generator\AbstractGenerator|string $generator, $sql, iterable $params = [], array $config = [], $file = null ): int

このメソッドは ryunosuke\dbml\Database::yield() を用いて省メモリで動作するように実装されているので、ある程度巨大な結果セットになるクエリでも実行できる。

このメソッドを直接呼ぶことはほとんど無い。下記の例のように exportXXX 形式で呼び出すことが大半である。

// 標準出力に php 配列を書き出す(全部省略のシンプル版) $db->exportArray('SELECT * FROM tablename'); // /tmp/tablename.csv に CSV を書き出す(ファイル指定) $db->exportCsv('SELECT * FROM tablename', [], [ 'bom' => false, 'encoding' => 'SJIS_win', ], '/tmp/tablename.csv'); // 標準出力に JSON を書き出す(クエリビルダで親子関係を指定) $db->exportJson($db->select('t_parent/t_child'), [], [ 'assoc' => false, 'option' => JSON_UNESCAPED_UNICODE, ], null);
Parameter
type name summary
AbstractGenerator|​string $generator
$sql
​iterable $params = []
​array $config = []
$file = null
Return
type summary
​int

[m] exportArray レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray()") を参照)

レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray() を参照)
public function exportArray( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportArray() レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray()") を参照)

[m] exportCsv レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv()") を参照)

レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv() を参照)
public function exportCsv( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportCsv() レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv()") を参照)

[m] exportJson レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson()") を参照)

レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson() を参照)
public function exportJson( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportJson() レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson()") を参照)

[m] subselect 子供レコード配列を取得するビルダを返す

子供レコード配列を取得するビルダを返す
public function subselect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

このメソッドを使うと自身のレコード配列に子供レコードを生やすことができる。 この処理はクエリを2回投げることで実現される。つまり 1 + N 問題は起こらない(tuple だけではなく array/assoc でも同様)。 この挙動は setLazyMode で変更可能。

WHERE や ORDER などの条件も完全に活かすことができるが、LIMIT だけは扱いが異なる(下記のサンプルコードを参照)。 これを利用するといわゆる「グループ内の上位N件取得」も簡単に実現できる。

親子の結合条件は原則として外部キーが前提。 外部キーがない・特殊な条件で結合したい場合は親側のキーに {cond} でカラムを指定する。

# t_parent に紐づく t_child レコードを引っ張る $row = $db->selectTuple([ 't_parent P' => [ 'parent_id', // 外部キーが使用される 'childarray' => $db->subselectArray('t_child'), // 結合カラムを明示的に指定 'childassoc{cid: pid}' => $db->subselectAssoc('t_child'), ], ]); # サブの limit は各行に対して作用する $rows = $db->selectArray([ 't_parent P' => [ 'parent_id', // 各行に紐づく t_child の最新5件を取得する 'latestchildren' => $db->subselectArray('t_child', [], ['update_time' => 'DESC'], 5), ], ]); # 簡易記法としての配列形式(t_parent に紐づく t_child レコードを引っ張る) $row = $db->selectTuple([ 't_parent P' => [ 'parent_id', // 親のキーがテーブル名(エイリアス)の役目を果たし、原則として assoc 相当の動作になる // つまり下記2つは全く同じ動作となる 'childassoc1' => $db->subselectAssoc('t_child'), 't_child AS childassoc2' => ['*'], ], ]); # ネストもできる(t_ancestor に紐づく t_parent に紐づく t_child レコードを引っ張る) $row = $db->selectTuple([ 't_ancestor AS A' => [ 't_parent AS P' => [ 't_child AS C' => ['*'], ], ], ]);
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] subselectArray 子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectArray( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectArray() 子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subselectAssoc 子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectAssoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectAssoc() 子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subselectLists 子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectLists( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectLists() 子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subselectPairs 子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectPairs( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectPairs() 子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subselectTuple 子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectTuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectTuple() 子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subselectValue 子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subselectValue( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectValue() 子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subquery 相関サブクエリ表すビルダを返す

相関サブクエリ表すビルダを返す
public function subquery( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

単純に相関のあるテーブルとの外部キーを追加するだけの動作となる。 subexists や subcount, submin などはこのメソッドの特殊化と言える。

// SELECT 句での使用例 $db->select([ 't_article' => [ // 各 t_article に紐づく t_comment の ID を結合する 'comment_ids' => $db->subquery('t_comment.GROUP_CONCAT(comment_id)'), ], ]); // SELECT // (SELECT GROUP_CONCAT(comment_id) FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS comment_ids // FROM t_article // WHERE 句での使用例 $db->select('t_article', [ // active な t_comment を持つ t_article を取得する(ただし、この例なら EXISTS で十分) 'article_id' => $db->subquery('t_comment', ['status' => 'active']), ]); // SELECT // t_article.* // FROM t_article // WHERE // article_id IN( // SELECT t_comment.article_id FROM t_comment WHERE // t_comment.status = 'active' AND // t_comment.article_id = t_article.article_id // )
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] subexists 相関サブクエリの EXISTS を表すビルダを返す

相関サブクエリの EXISTS を表すビルダを返す
public function subexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
// SELECT 句での使用例 $db->select([ 't_article' => [ // 各 t_article に紐づく t_comment にレコードを持つなら true が返される 'has_comment' => $db->subexists('t_comment'), // 各 t_article に紐づく t_comment delete_flg = 0 なレコードを持たないなら true が返される 'has_not_comment' => $db->notSubexists('t_comment', ['delete_flg' => 0]), ], ]); // SELECT // EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS has_comment, // NOT EXISTS (SELECT * FROM t_comment WHERE (delete_flg = '0') AND (t_comment.article_id = t_article.article_id)) AS has_not_comment // FROM t_article // WHERE 句での使用例 $db->select('t_article', [ // 「各記事でコメントを持つ記事」を表す WHERE EXISTS になる $db->subexists('t_comment'), ]); // SELECT // t_article.* // FROM t_article // WHERE (EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id)) // JOIN も含めて複数テーブルがあり、明確に「t_article と t_comment で」結びたい場合はキーで明示する $db->select('t_article, t_something', [ // 「何と?」をキーで明示できる 't_article' => $db->subexists('t_comment'), // これだと t_something と t_comment での結合となる(外部キーがあれば、だが) 't_something' => $db->subexists('t_comment'), // さらに t_something に複数の外部キーがある場合は:で明示できる 't_something:fkname' => $db->subexists('t_comment'), ]);
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト
Prototype
kind source summary
​instead SubAggregateTrait::subexists() 相関サブクエリの EXISTS を表すビルダを返す

[m] notSubexists ryunosuke\dbml\Mixin\SubAggregateTrait::subexists()") の否定版

ryunosuke\dbml\Mixin\SubAggregateTrait::subexists() の否定版
public function notSubexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト
Prototype
kind source summary
​instead SubAggregateTrait::notSubexists() ryunosuke\dbml\Mixin\SubAggregateTrait::subexists()") の否定版

[m] subaggregate 相関サブクエリの aggaregate を表すビルダを返す

相関サブクエリの aggaregate を表すビルダを返す
public function subaggregate( array|string $aggregate, array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder

下記のような subXXX のために存在しているので、このメソッドを直接呼ぶような状況はあまり無い。

# SELECT 句での使用例 $db->select([ 't_article' => [ // t_article に紐づく t_comment の数を返す 'subcount' => $db->subcount('t_comment'), // t_article に紐づく t_comment.comment_id の最小値を返す 'submin' => $db->submin('t_comment.comment_id'), // t_article に紐づく t_comment.comment_id の最大値を返す 'submax' => $db->submax('t_comment.comment_id'), // t_article に紐づく t_comment.comment_id の合計値を返す 'subsum' => $db->subsum('t_comment.comment_id'), // t_article に紐づく t_comment.comment_id の平均値を返す 'subavg' => $db->subavg('t_comment.comment_id'), ], ]); // SELECT // (SELECT COUNT(*) AS `*@count` FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS subcount, // (SELECT MIN(t_comment.comment_id) AS `t_comment.comment_id@min` FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS submin, // (SELECT MAX(t_comment.comment_id) AS `t_comment.comment_id@max` FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS submax, // (SELECT SUM(t_comment.comment_id) AS `t_comment.comment_id@sum` FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS subsum, // (SELECT AVG(t_comment.comment_id) AS `t_comment.comment_id@avg` FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS subavg // FROM t_article # WHERE 句での使用例1 $db->select('t_article A', [ // 「各記事でコメントが3件以上」を表す '3 < ?' => $db->subcount('t_comment'), ]); // SELECT A.* // FROM t_article A // WHERE // 3 < ( // SELECT COUNT(*) AS `*@count` // FROM t_comment // WHERE t_comment.article_id = A.article_id // ) # WHERE 句での使用例2 $db->select('t_article A+t_comment C', [ // 「各記事で最新のコメント1件と結合」を表す 'C.comment_id' => $db->submax('t_comment.comment_id'), ]); // SELECT A.*, C.* // FROM t_article A // INNER JOIN t_comment C ON C.article_id = A.article_id // WHERE C.comment_id IN ( // SELECT MAX(t_comment.comment_id) AS `t_comment.comment_id@max` // FROM t_comment // WHERE t_comment.article_id = A.article_id // )
Parameter
type name summary
​array|​string $aggregate 集約関数名
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] subcount 相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subcount( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subcount() 相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] submin 相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submin( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submin() 相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] submax 相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submax( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submax() 相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subsum 相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subsum( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subsum() 相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subavg 相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subavg( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subavg() 相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] submedian 相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submedian( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submedian() 相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subjson 相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subjson( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subjson() 相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] aggregate 集約を実行する

集約を実行する
public function aggregate( string|array $aggregation, array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
  • 集約列が0個
    • 取得列が1個のみ:value 相当(スカラー値を返す)
    • 取得列が2個以上:tuple 相当(連想配列を返す)
  • 集約列が1個
    • 取得列が1個のみ:pairs 相当(キーペアを返す)
    • 取得列が2個以上:assoc 相当(連想配列の連想配列を返す)
  • 上記以外: array 相当(連想配列の配列を返す)
// t_table.group_id の COUNT がスカラー値で得られる $db->aggregate('count', 't_table.group_id'); // t_table.group_id の AVG がキーペアで得られる $db->aggregate('avg', 't_table.group_id', [], 't_table.group_id'); // t_table.group_id の MIN,MAX が連想配列で得られる $db->aggregate(['min', 'max'], 't_table.group_id', [], 't_table.group_id');

が、グループのキーが SELECT されたり、順番が大事だったりするので、実用上の利点はほとんどない。 同じ条件、グループで MIN, MAX を一回で取りたい、のような状況で使う程度で、どちらかと言えば下記の集約関数の個別メソッドのために存在している。

// t_table の件数をスカラー値で返す $db->count('t_table'); // id 10 未満の t_table.id の最小値をスカラー値で返す $db->min('t_table.id', ['id < 10']); // id 10 未満の group_id でグルーピングした t_table.id の最大値を `[group_id => max]` 形式で返す $db->max('t_table.id', ['id < 10'], ['group_id']); // id 10 未満の group_id でグルーピングした t_table.score の合計値が 5 以上のものを `[group_id => [id@sum => id@sum, score@sum => score@sum]]` 形式で返す $db->sum('t_table.id,score', ['id < 10'], ['group_id'], ['score@sum >= 5']);

特殊な使い方として $aggregate に連想配列を渡すとクロス集計ができる。 これはこのメソッドのかなり特異な使い方で、そういったことがしたい場合は普通にクエリビルダや生クエリでも実行できるはず。

# t_login テーブルから user_id ごとの2016~2018年度月次集計を返す $db->aggregate([ 'year_2016' => 'SUM(YEAR(login_at) = "2016")', // 文字列でも良いがインジェクションの危険アリ 'year_2017' => $db->raw('SUM(YEAR(login_at) = ?)', '2017'), // 普通は raw で Expression を渡す 'year_2018' => ['SUM(YEAR(login_at) = ?)' => '2018'], // 配列を渡すと自動で Expression 化される ], 't_login', ['login_at:[~)' => ['2016-01-01', '2019-01-01']], 'user_id'); // SELECT // user_id, // SUM(YEAR(login_at) = "2016") AS `year_2016`, // SUM(YEAR(login_at) = "2017") AS `year_2017`, // SUM(YEAR(login_at) = "2018") AS `year_2018` // FROM // t_login // WHERE // login_at >= "2016-01-01" AND login_at < "2019-01-01" // GROUP BY // user_id # 上記は式が同じで値のみ異なるので省略記法が存在する $db->aggregate([ 'SUM(YEAR(login_at) = ?)' => ['2016', '2017', '2018'], ], 't_login', ['login_at:[~)' => ['2016-01-01', '2019-01-01']], 'user_id'); // 生成される SQL は同じ
Parameter
type name summary
​string|​array $aggregation 集約関数名
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] exists レコードの存在を返す

レコードの存在を返す
public function exists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): bool
# 単純に t_article が存在するか bool で返す $db->exists('t_article'); // SELECT EXISTS (SELECT * FROM t_article) # 有効な t_article が存在するか bool で返す $db->exists('t_article', ['delete_flg' => 0]); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0) # 有効な t_article が存在するかロックしつつ bool で返す $db->exists('t_article', ['delete_flg' => 0], true); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0 FOR UPDATE)
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
​bool レコードが存在するなら true
Prototype
kind source summary
​instead AggregateTrait::exists() レコードの存在を返す

[m] count COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function count( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::count() COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] min MIN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MIN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function min( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::min() MIN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] max MAX クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MAX クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function max( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::max() MAX クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] sum SUM クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

SUM クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function sum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::sum() SUM クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] avg AVG クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

AVG クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function avg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::avg() AVG クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] median MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function median( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::median() MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] json JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function json( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::json() JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] union UNION する

UNION する
public function union( array|string|ryunosuke\dbml\Query\SelectBuilder $unions, array|string $column = [], array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

FROM が $unions 節のサブクエリになり、$column や $where はそのサブクエリに対して適用される。

$db->union(['SELECT "a"', 'SELECT "b"']); // → シンプルに `SELECT "a" UNION SELECT "b"` と解釈される $db->union(['SELECT "a1" AS c1, "a2" AS c2', 'SELECT "b1" AS c1, "b2" AS c2'], ['c1']); // → UNION 部が FROM 句に飲み込まれ `SELECT c1 FROM (SELECT "a1" AS c1, "a2" AS c2 UNION SELECT "b1" AS c1, "b2" AS c2) AS T` と解釈される $db->union(['SELECT "a1" AS c1, "a2" AS c2', 'SELECT "b1" AS c1, "b2" AS c2'], ['c1'], ['c2' => 'b1']); // → UNION 部が FROM 句に飲み込まれ `SELECT c1 FROM (SELECT "a1" AS c1, "a2" AS c2 UNION SELECT "b1" AS c1, "b2" AS c2) AS T WHERE c2 = "b1"` と解釈される $db->unionAll([$db->select('t_article'), $db->select('t_article')]); // → クエリビルダも使える(倍の行を取得できる。あくまで例なので意味はない)
Parameter
type name summary
​array|​string|​SelectBuilder $unions union サブクエリ
​array|​string $column = [] 取得カラム [column]
​array|​string $where = [] 条件
​array|​string $orderBy = [] 単カラム名かな連想配列
​array|​int $limit = [] 単数値かな連想配列
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] unionAll UNION ALL する

UNION ALL する
public function unionAll( array|string|ryunosuke\dbml\Query\SelectBuilder $unions, array|string $column = [], array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder

ALL で UNION される以外は ryunosuke\dbml\Database::union() と全く同じ。

Parameter
type name summary
​array|​string|​SelectBuilder $unions union サブクエリ
​array|​string $column = [] 取得カラム [column]
​array|​string $where = [] 条件
​array|​string $orderBy = [] 単カラム名かな連想配列
​array|​int $limit = [] 単数値かな連想配列
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] neighbor 特定レコードの前後のレコードを返す

特定レコードの前後のレコードを返す
public function neighbor( array|string $tableDescriptor, array $predicates, int $limit = 1 ): array

ryunosuke\dbml\Query\SelectBuilder::neighbor() へのプロキシメソッド。

Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array $predicates
​int $limit = 1
Return
type summary
​array

[m] gather レコード情報をかき集める

レコード情報をかき集める
public function gather( string $tablename, array $wheres = [], array $other_wheres = [], bool $parentive = false ): array

特定のレコードと関連したレコードを再帰的に処理して主キーの配列で返す。 運用的な使用ではなく、保守的な使用を想定(運用でも使えなくはないが、おそらく速度的に実用に耐えない)。

# t_article: 1 に関連するレコードをざっくりと返す(t_article -> t_comment -> t_comment_file のようなリレーションの場合) $db->gather('t_article', ['article_id' => 1]); // results: [ 't_article' => [ ['article_id' => 1], ], 't_comment' => [ ['comment_id' => 1, 'article_id' => 1], ['comment_id' => 2, 'article_id' => 1], ], 't_comment_file' => [ ['file_id' => 1, 'comment_id' => 1], ['file_id' => 2, 'comment_id' => 1], ['file_id' => 3, 'comment_id' => 2], ], ]; # $other_wheres で他のテーブルの条件が指定できる $db->gather('t_article', ['article_id' => 1], [ 't_comment' => ['comment_id' => 2], 't_comment_file' => '0', ]); // results: [ 't_article' => [ ['article_id' => 1], ], 't_comment' => [ ['comment_id' => 2, 'article_id' => 1], ], ]; # $parentive: true で親方向に辿れる $db->gather('t_comment_file', ['file_id' => 1], [], true); // results: [ 't_comment_file' => [ ['file_id' => 1, 'comment_id' => 1], ], 't_comment' => [ ['comment_id' => 1, 'article_id' => 1], ], 't_article' => [ ['article_id' => 1], ], ];
Parameter
type name summary
​string $tablename 対象テーブル名
​array $wheres = [] 対象テーブルの条件
​array $other_wheres = [] その他の条件
​bool $parentive = false 親方向にたどるか子方向に辿るか
Return
type summary
​array かき集めたレコード情報([テーブル名 => [主キー配列1, 主キー配列2, ...]])

[m] differ 配列を仮想テーブルとみなして差分をとる

配列を仮想テーブルとみなして差分をとる
public function differ( array $array, string $tablename, $wheres = [] ): array

指定された配列で仮想的なテーブルを作成し、NATURAL LEFT JOIN して無いものを返すイメージ。

配列はいわゆる「配列の配列」である必要がある。 要素のキーが一致しない場合は例外を投げる。

# hoge.jpg, fuga.jpg, piyo.jpg と t_s3 の差分をとる $db->differ([ 'hoge' => ['path' => 'img/hoge.jpg'], 'fuga' => ['path' => 'img/fuga.jpg'], 'piyo' => ['path' => 'img/piyo.jpg'], ], 't_s3'); // results: キーが維持されつつ存在しないものだけを返す [ 'fuga' => ['path' => 'img/fuga.jpg'], ];
Parameter
type name summary
​array $array
​string $tablename
$wheres = []
Return
type summary
​array

[m] dryrun dryrun モードへ移行する

dryrun モードへ移行する
public function dryrun(): ryunosuke\dbml\Database

このメソッドを呼んだ直後は、更新系メソッドが実際には実行せずに実行されるクエリを返すようになる。 後述する insertArray/updateArray などでクエリを取得したいときやテスト・確認などで便利。

このメソッドは setOption を利用した ryunosuke\dbml\Database::context() メソッドで実装されている。つまり

  • setOption('dryrun', true);
  • context(['dryrun' => true]);

などと実質的にはほとんど同じ(後者に至っては全く同じ=移譲・糖衣構文)。 ryunosuke\dbml\Database::context() で実装されているということは下記のような処理が可能になる。

$db->dryrun()->update('t_table', $data, $where); // ↑の文を抜けると dryrun モードは解除されている $db->dryrun(); $db->update('t_table', $data, $where); // 逆に言うとこのようなことはできない(dryrun モードになった直後にコンテキストが破棄され、元に戻っている) $db->dryrun()->t_table->update($data, $where); // ただし、Gateway で dryrun したくてもこれは出来ない。 `->t_table` の時点で GC が実行され、 `->update` 実行時点では何も変わらなくなっているため $db->t_table->dryrun()->update($data, $where); // Gateway で使いたい場合はこのように Gateway クラスに dryrun が生えているのでそれを使用する
Return
type summary
Database

[m] prepare prepare モードへ移行する

prepare モードへ移行する
public function prepare(): ryunosuke\dbml\Database

このメソッドを呼んだ直後は、更新系メソッドが実際には実行せずに prepare されたステートメントを返すようになる。

このメソッドは setOption を利用した ryunosuke\dbml\Database::context() メソッドで実装されている。つまり

  • setOption('prepare', true);
  • context(['prepare' => true]);

などと実質的にはほとんど同じ(後者に至っては全く同じ=移譲・糖衣構文)。 つまりは ryunosuke\dbml\Database::dryrun() と同じなのでそちらも参照。

Return
type summary
Database

[m] cache cache モードへ移行する

cache モードへ移行する
public function cache(int $seconds): ryunosuke\dbml\Database

このメソッドを呼んだ直後は、取得系メソッドがキャッシュされるようになる。

このメソッドは setOption を利用した ryunosuke\dbml\Database::context() メソッドで実装されている。つまり

  • setOption('caching', true);
  • context(['caching' => true]);

などと実質的にはほとんど同じ(後者に至っては全く同じ=移譲・糖衣構文)。 つまりは ryunosuke\dbml\Database::dryrun() と同じなのでそちらも参照。

このメソッドは「キャッシュ有効モード」のような意味合いも持つ。 つまり「結果をキャッシュするか」「キャッシュが有ったら使用するか」という2軸の効果を持つ。

  • 指定すればキャッシュされるしキャッシュがあれば使用する
  • 指定しなければキャッシュされないしキャッシュがあっても使用しない

秒数指定はキャッシュされるときの ttl であり、キャッシュヒットしただけの延長は為されない。

$db->cache(10)->selectArray('t_table'); // この SELECT は10秒間キャッシュされる // ・・・この間でいかなる更新をしても(されても) $db->cache(10)->selectArray('t_table'); // この SELECT は10秒以内ならキャッシュを返す // ↓は↑でキャッシュされていてもキャッシュを返さない $db->selectArray('t_table');// この SELECT はキャッシュを返さない
Parameter
type name summary
​int $seconds
Return
type summary
Database

[m] prepareSelect 取得系クエリをプリペアする

取得系クエリをプリペアする
public function prepareSelect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
Statement

[m] executeSelect 取得系クエリを実行する

取得系クエリを実行する
public function executeSelect( string $query, iterable|array $params = [], ?int $ttl = null ): Doctrine\DBAL\Result
Parameter
type name summary
​string $query
​iterable|​array $params = []
​?int $ttl = null
Return
type summary
Result
Throws
type summary
Exception

[m] executeAffect 更新系クエリを実行する

更新系クエリを実行する
public function executeAffect( string $query, iterable|array $params = [], ?int $retry = null ): int|string
Parameter
type name summary
​string $query
​iterable|​array $params = []
​?int $retry = null
Return
type summary
​int|​string The number of affected rows.
Throws
type summary
Exception

[m] executeSelectAsync 取得系クエリを非同期で実行する

取得系クエリを非同期で実行する
public function executeSelectAsync( string $query, iterable|array $params = [] ): \Closure

このメソッドはすぐに処理を返し、callable を返す。 その間もクエリは実行されており、callable を実行すると最終結果が得られる。

非常に実験的な機能で現実装は mysqli/pgsql のみの対応。仕様は互換性を考慮せず変更されることがある。

Parameter
type name summary
​string $query
​iterable|​array $params = []
Return
type summary
Closure
Throws
type summary
Exception

[m] executeAffectAsync 更新系クエリを非同期で実行する

更新系クエリを非同期で実行する
public function executeAffectAsync( string $query, iterable|array $params = [] ): \Closure

このメソッドはすぐに処理を返し、callable を返す。 その間もクエリは実行されており、callable を実行すると最終結果が得られる。

非常に実験的な機能で現実装は mysqli/pgsql のみの対応。仕様は互換性を考慮せず変更されることがある。

Parameter
type name summary
​string $query
​iterable|​array $params = []
Return
type summary
Closure
Throws
type summary
Exception

[m] executeAsync 複数クエリを非同期で実行する

複数クエリを非同期で実行する
public function executeAsync( array $queries, ?Doctrine\DBAL\Connection $connection = null ): callable|object

このメソッドはすぐに処理を返し、無名クラスを返す。 tick を実行すると処理が進むので呼び元で適宜実行しなければならない。 ただし declare(ticks=1) しておけばある程度自動で呼ばれるようになる。

ticks を利用しているのは mysqli/pgsql ともに「本当に同時」には投げられないため。 結局のところ結果を受け取らない限りは次のクエリが自動実行されるようなことはなく、明示的に受け取りが必要。 それを ticks で代用しているに過ぎない。

返り値を引数なしで呼ぶと同期待ちして全て返す。 引数にインデックスを与えるとそのクエリが完了するまで待ってそれを返す。

非常に実験的な機能で現実装は mysqli/pgsql のみの対応。

Parameter
type name summary
​array $queries
​?Connection $connection = null
Return
type summary
​callable|​object

[m] getEmptyRecord 空のレコードを返す

空のレコードを返す
public function getEmptyRecord( string $tablename, array|ryunosuke\dbml\Entity\Entityable $default = [] ): array|ryunosuke\dbml\Entity\Entityable

各カラムはテーブル定義のデフォルト値が格納される(それ以外はすべて null)。 ただし、引数で渡した $default 配列が優先される。

$tablename がエンティティ名の場合はエンティティインスタンスで返す。

# 配列で返す $array = $db->getEmptyRecord('t_article'); # エンティティで返す $entity = $db->getEmptyRecord('Article');
Parameter
type name summary
​string $tablename テーブル名
​array|​Entityable $default = [] レコードのデフォルト値
Return
type summary
​array|​Entityable 空レコード

[m] migrate データ移行用 SQL を発行する

データ移行用 SQL を発行する
public function migrate( string $tableName, string $dml, array|string $recordsOrFilename, ...$opt ): array|int

要するに与えられたファイル・配列を SQL 文に変換する。 csv,json,php などを手元で(マクロなどで) sql に変換する作業は多々あるが、それを簡易化できる。

ただし、 dryrun: true のときのみであり false だと実際に実行され、affected rows を返す。 特に change や delete を指定したときは致命的な事態になるので注意。

$dml には下記が指定できる。

select
  • dryrun なら主キーで WHERE して該当列を返すような SQL を返す
  • dryrun でないなら実行してレコード配列を返す(実質的に入力配列と(型以外は)ほぼ同じものを返す)
insert
  • dryrun なら実行されるであろう INSERT な SQL を返す
  • dryrun でないなら実行してレコード配列を INSERT する(追加のみで更新・削除は行われない)
update
  • dryrun なら実行されるであろう UPDATE な SQL を返す
  • dryrun でないなら実行してレコード配列に UPDATE する(更新のみで追加・削除は行われない)
delete
  • dryrun なら実行されるであろう DELETE な SQL を返す
  • dryrun でないなら実行してレコード配列を DELETE する(削除のみで追加・更新は行われない)
modify
  • dryrun なら実行されるであろう UPSERT(MODIFY) な SQL を返す
  • dryrun でないなら実行してレコード配列を MODIFY する(追加・更新のみで削除は行われない)
change
  • dryrun なら実行されるであろう INSERT/UPDATE/DELETE な SQL を返す
  • dryrun でないなら実行してレコード配列の状態に「持っていく」(追加・更新・削除が行われる)
save
  • dryrun なら実行されるであろう INSERT/UPDATE/DELETE な SQL を返す
  • dryrun でないなら実行してレコード配列の状態に「再帰的に持っていく」(再帰的に追加・更新・削除が行われる)

どの方法を選んだとしてもレコード配列に主キーは必須となる(値は null でも構わない)。

$opt で chunk や ignore オプションが指定できる。 特に chunk/bulk は返り値の SQL が大幅に変化する。

Parameter
type name summary
​string $tableName
​string $dml
​array|​string $recordsOrFilename
...$opt
Return
type summary
​array|​int

[m] import ツリー構造の配列を一括で取り込む

ツリー構造の配列を一括で取り込む
public function import(array $datatree): int

ツリー配列を水平的に走査して ryunosuke\dbml\Database::changeArray() でまとめて更新する。 親・子・孫のような多階層でも動作する。 外部キーで親のカラムを参照している場合、指定配列に含まれていなくても自動的に追加される。

# t_ancestor に紐づく t_parent に紐づく t_child を一気に追加する $db->import([ 't_ancestor' => [ [ 'ancestor_name' => '祖先名', 't_parent' => [ [ 'parent_name' => '親名', 't_child' => [ [ 'child_name' => '子供名1', ], ], ], ], ], ], ]); // INSERT INTO t_ancestor (ancestor_id, ancestor_name) VALUES (1, "祖先名") ON DUPLICATE KEY UPDATE ancestor_id = VALUES(ancestor_id), ancestor_name = VALUES(ancestor_name) // INSERT INTO t_parent (parent_id, parent_name, ancestor_id) VALUES (1, "親名", 1) ON DUPLICATE KEY UPDATE parent_id = VALUES(parent_id), parent_name = VALUES(parent_name), ancestor_id = VALUES(ancestor_id) // INSERT INTO t_child (child_id, child_name, parent_id) VALUES (1, "子供名1", 1) ON DUPLICATE KEY UPDATE child_id = VALUES(child_id), child_name = VALUES(child_name), parent_id = VALUES(parent_id) // 必要に応じて DELETE も行われる
Parameter
type name summary
​array $datatree
Return
type summary
​int

[m] loadCsv CSV を取り込む

CSV を取り込む
public function loadCsv( array|string $tableName, string $filename, array $options = [] ): int|string[]|ryunosuke\dbml\Query\Statement

CSV の各フィールドをテーブルカラムとしてインポートする。 mysql だけは native:true を指定することで LOAD DATA INFILE による高速なロードが可能。 他の RDBMS はアプリでエミュレーションする。

$options の詳細は下記。

name default 説明
native false RDBMS ネイティブの機能を使うか(mysql 専用)
encoding mb_internal_encoding 取り込むファイルのエンコーディング
skip 0 読み飛ばす行(ヘッダ読み飛ばしのために1を指定することが多い)
delimiter ',' デリミタ文字(fgetcsv の第2引数)
enclosure '"' 囲いこみ文字(fgetcsv の第3引数)
escape '\' エスケープ文字(fgetcsv の第4引数)
eol "\n" 行終端文字(native:true 時のみ有効)
chunk null 一度に実行するレコード数(native:false 時のみ有効)
var_prefix '' mysql 変数のプレフィックス(native:true 時のみ有効だが気にしなくていい)

native は非常に高速だが、制約も留意点も多い。 非 native は汎用性があるが、ただの INSERT の羅列になるので速度的なメリットはない。

$table は要素1の配列でも与えられる。その場合キーがテーブル名、値が取り込むカラム(配列)となる。 配列でない場合(単純にテーブル名だけを与えた場合)は CSV 列とテーブル定義順が同じとみなしてすべて取り込む。 少々ややこしいので下記の使用例を参照。

# テーブル定義は t_hoge {id: int, name: string, data: blob, flg: tinyint} とする # CSV: "1,hoge,data,0" を取り込む例(テーブル定義と CSV が一致している最も単純な例) $db->loadCsv('t_hoge', $csvfile); // results: ['id' => 1, 'name' => 'hoge', 'data' => 'data', 'flg' => 0]; # CSV: "hoge,0" を取り込む例(CSV に一部しか含まれていない例) $db->loadCsv([ // このように [テーブル名 => カラム] の配列で指定する 't_hoge' => [ // 原則としてこの配列の並び順と CSV の並び順がマップされる 'name', // CSV 第1列 'flg', // CSV 第2列 // それ以降(CSV 列からはみ出す分)は他のカラムとして直値を与えることができる 'id' => 1, 'data' => null, ], ], $csvfile); // results: ['id' => 1, 'name' => 'hoge', 'data' => null, 'flg' => 0]; # CSV: "1,hoge,dummy,0" を取り込む例(CSV に取り込みたくない列が含まれている例) $db->loadCsv([ 't_hoge' => [ 'id', // CSV 第1列 'name', // CSV 第2列 null, // CSV 第3列。このように null を指定するとその列を読み飛ばすことができる 'flg', // CSV 第4列 ], ], $csvfile); // results: ['id' => 1, 'name' => 'hoge', 'data' => null, 'flg' => 0]; # CSV: "1,hoge" を HOGE として取り込む例(SQL 関数やクロージャを経由して取り込む例) $db->loadCsv([ 't_hoge' => [ 'id', // 値に ? で列値を参照できる式を渡すことができる(この場合キーがカラム名指定になる) 'name' => Expression::new('UPPER(?)'), // 「php レイヤ」という点以外は↑と同じ(CSV 値が引数で渡ってくる) 'name' => function ($v) { return strtoupper($v); }, ], ], $csvfile); // results: ['id' => 1, 'name' => 'HOGE', 'data' => null];

mysql の native はクロージャが使えなかったり、null の扱いがアレだったり eol に注意したりと細かな点は異なるが原則的には同じ(サンプルは省略)。 ただし、 PDO に PDO::MYSQL_ATTR_LOCAL_INFILE: true を与えないと動作しないのでそれだけは注意。

Parameter
type name summary
​array|​string $tableName テーブル名 or テーブル記法
​string $filename CSV ファイル名
​array $options = [] CSV オプション
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] insertSelect INSERT INTO SELECT 構文

INSERT INTO SELECT 構文
public function insertSelect( string|ryunosuke\dbml\Query\TableDescriptor $tableName, string|ryunosuke\dbml\Query\SelectBuilder $sql, array $columns = [], array|iterable $params = [], ...$opt ): int|string[]|ryunosuke\dbml\Query\Statement
# 生クエリで INSERT INTO SELECT $db->insertSelect('t_destination', 'SELECT * FROM t_source'); // INSERT INTO t_destination SELECT * FROM t_source # $columns を指定すると INSERT カラムを指定できる $db->insertSelect('t_destination', 'SELECT * FROM t_source', ['id', 'name', 'content']); // INSERT INTO t_destination (id, name, content) SELECT * FROM t_source # クエリビルダも渡せる $db->insertSelect('t_destination', $db->select('t_source')); // INSERT INTO t_destination SELECT * FROM t_source
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​string|​SelectBuilder $sql SELECT クエリ
​array $columns = [] カラム定義
​array|​iterable $params = [] bind パラメータ
...$opt
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] insertArray BULK INSERT 構文

BULK INSERT 構文
public function insertArray( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $data, ...$opt ): int|array|string[]|ryunosuke\dbml\Query\Statement

BULK INSERT の仕様上、与えるカラム配列はキーが統一されていなければならない。

$db->insertArray('t_table', [ [ 'colA' => '1', // [カラム => 値] 形式 'colB' => $db->raw('UPEER(?)', 'b'), // [カラム => Expression] 形式 ], [ 'colA' => '2', 'colB' => $db->raw('UPEER(?)', 'b'), ], ]); // INSERT INTO t_table (colA, colB) VALUES ('1', UPPER('b')), ('2', UPPER('b'))
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​int|​array|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] insertArrayOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insertArray()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insertArray()
public function insertArrayOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $data, ...$opt ): array|string

返り値として挿入した主キー配列の配列を返す(自動採番テーブルのみ)。 この機能は実験的な機能で、予告なく変更されることがある。

Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::insertArrayOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insertArray()")

[m] insertArrayAndPrimary 主キーを返す ryunosuke\dbml\Database::insertArray()")

主キーを返す ryunosuke\dbml\Database::insertArray()
public function insertArrayAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::insertArrayAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::insertArray()")

[m] updateArray BULK UPDATE 構文

BULK UPDATE 構文
public function updateArray( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $data, array|mixed $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

指定配列でバルクアップデートする。 $data の引数配列には必ず主キーを含める必要がある。

# (id = 1,2,3) の行がそれぞれ与えられたデータに UPDATE される $db->updateArray('tablename', [ ['id' => 1, 'name' => 'hoge'], ['id' => 2, 'data' => 'FUGA'], ['id' => 3, 'name' => 'piyo', 'data' => 'PIYO'], ], ['status_cd' => 50]); // UPDATE tablename SET // name = CASE id WHEN '1' THEN 'hoge' WHEN '3' THEN 'piyo' ELSE name END, // data = CASE id WHEN '2' THEN 'FUGA' WHEN '3' THEN 'PIYO' ELSE data END // WHERE (status_cd = '50') AND (id IN ('1','2','3'))

あくまで UPDATE であり、存在しない行には関与しない。

$data の引数配列に含めた主キーは WHERE 句に必ず追加される。 したがって $where を指定するのは「status_cd = 50 のもののみ」などといった「前提となるような条件」を書く。

Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $data カラムデータ配列あるいは Generator
​array|​mixed $where = [] 束縛条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] updateArrayAndBefore レコードを返す ryunosuke\dbml\Database::updateArray()")

レコードを返す ryunosuke\dbml\Database::updateArray()
public function updateArrayAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $data, array|mixed $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $data カラムデータ配列あるいは Generator
​array|​mixed $where = [] 束縛条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::updateArrayAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::updateArray()")

[m] deleteArray BULK DELETE 構文

BULK DELETE 構文
public function deleteArray( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

指定配列でバルクデリートする。 バルクデリートとは普通のデリートであり、条件が分割され得る以外の違いはない。

# それぞれの条件に合致する行が DELETE される $db->deleteArray('tablename', [ ['id' => 1], ['status' => 2], ['title:LIKE' => 'hoge'], ]); // DELETE FROM tablename // WHERE // (id = '1') OR (status = 2) OR (title LIKE = 'hoge') # 上記の使い方だと delete と大差がないが、大量の主キー指定などで分割が活きてくる $db->deleteArray('tablename', [ ['id' => 1], ['id' => 2], ['id' => 3], // ・・・ ['id' => 997], ['id' => 998], ['id' => 999], ]); // DELETE FROM tablename // WHERE // (id = '1') OR (id = '2') OR (id = '3') // ・・・ // DELETE FROM tablename // WHERE // (id = '997') OR (id = '998') OR (id = '999')
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $where = [] 削除条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] deleteArrayAndBefore レコードを返す ryunosuke\dbml\Database::deleteArray()")

レコードを返す ryunosuke\dbml\Database::deleteArray()
public function deleteArrayAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $where = [] 削除条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::deleteArrayAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::deleteArray()")

[m] modifyArray BULK UPSERT 構文

BULK UPSERT 構文
public function modifyArray( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

指定配列でバルクアップサートする。

$insertData だけを指定した場合は「与えられた配列を modify する」という直感的な動作になる。 更新は行われないので実質的に「重複を無視した挿入」のように振舞う。

$updateData を指定すると存在する場合にその値が使用される。 行ごとではなく一律であることに注意。 なので $updateData はレコードの配列ではなく [key => value] のシンプルな配列を与える。

# 存在する行は (name = XXX) になり、追加される行は (name = hoge,fuga,piyo) になる $db->modifyArray('tablename', [ ['id' => 1, 'name' => 'hoge'], ['id' => 2, 'name' => 'fuga'], ['id' => 3, 'name' => 'piyo'], ], ['name' => 'XXX']); // INSERT INTO tablename (id, name) VALUES // ('1', 'hoge'), // ('2', 'fuga'), // ('3', 'piyo') // ON DUPLICATE KEY UPDATE // name = 'XXX' # $updateData に ['*' => ?callable] を渡すと $updateData に無いカラムが $insertData を元にコールバックされる(大抵は null を渡せば事足りる。modify の example も参照) $db->modifyArray('tablename', [ ['id' => 1, 'name' => 'hoge'], ['id' => 2, 'name' => 'fuga'], ['id' => 3, 'name' => 'piyo'], ], ['*' => null, 'data' => 'XXX']); // INSERT INTO tablename (id, name) VALUES // ('1', 'hoge'), // ('2', 'fuga'), // ('3', 'piyo') // ON DUPLICATE KEY UPDATE // id = VALUES(id), // name = VALUES(name), // data = 'XXX' # $updateData を指定しなければ VALUES(col) になる(≒変更されない) $db->modifyArray('tablename', [ ['id' => 1, 'name' => 'hoge'], ['id' => 2, 'name' => 'fuga'], ['id' => 3, 'name' => 'piyo'], ]); // INSERT INTO tablename (id, name) VALUES // ('1', 'hoge'), // ('2', 'fuga'), // ('3', 'piyo') // ON DUPLICATE KEY UPDATE // id = VALUES(id), // name = VALUES(name)
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] modifyArrayAndBefore レコードを返す ryunosuke\dbml\Database::modifyArray()")

レコードを返す ryunosuke\dbml\Database::modifyArray()
public function modifyArrayAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::modifyArrayAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::modifyArray()")

[m] modifyArrayAndPrimary 主キーを返す ryunosuke\dbml\Database::modifyArray()")

主キーを返す ryunosuke\dbml\Database::modifyArray()
public function modifyArrayAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::modifyArrayAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::modifyArray()")

[m] changeArray DELETE+INSERT+UPDATE を同時に行う

DELETE+INSERT+UPDATE を同時に行う
public function changeArray( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array $dataarray, array|mixed $where, string $uniquekey = "PRIMARY", ?array $returning = [], ...$opt ): array

テーブル状態を指定した配列・条件に「持っていく」メソッドとも言える。

このメソッドは複数のステートメントが実行され、 prepare を使うことが出来ない。 また、可能な限りクエリを少なくかつ効率的に実行されるように構築されるので、テーブル定義や与えたデータによってはまったく構成の異なるクエリになる可能性がある(結果は同じになるが)。 具体的には

  • BULK MERGE をサポートしていてカラムが完全に共通の場合: delete + modifyArray(単一)的な動作(最も高速)
  • BULK MERGE をサポートしていてカラムがそれなりに共通の場合: delete + modifyArray(複数)的な動作(比較的高速)
  • merge をサポートしていてカラムが完全に共通の場合: delete + prepareModify(単一)的な動作(標準速度)
  • merge をサポートしていてカラムがそれなりに共通の場合: delete + prepareModify(複数)的な動作(比較的低速)
  • merge をサポートしていてカラムがバラバラだった場合: delete + 各行 modify 的な動作(最も低速)
  • merge をサポートしていなくてカラムがバラバラだった場合: delete + 各行 select + 各行 insert/update 的な動作(最悪)

という動作になる。

返り値は [primaryKeys] となり「その世界における主キー配列」を返す。

$returning を渡すと 主キーをキーとしたレコード配列を返すようになる。 レコード配列には空文字キーで下記の値が自動で設定される。

1
レコードが作成された
-1
レコードが削除された
2
レコードが更新された
0
更新対象だが更新されなかった(mysql のみ) 返ってくるレコードのソースは下記のとおりである。
INSERT
作成した後のレコード(元がないのだから新しいレコードしか返し得ない)
DELETE
削除する前のレコード(削除したのだから元のレコードしか返し得ない)
UPDATE
更新する前のレコード(「更新する値」は手元にあるわけなので更新前の値の方が有用度が高いため) ただし bulk は自動で無効になるので注意(上記で言うところの「標準速度」が最速になる)。

dryrun 中は [[primaryKeys], [実行した SQL]] という2タプルの階層配列を返す。 この返り値は内部規定であり、この構造に依存したコードを書いてはならない。 また、primaryKeys は現在の状態に基づく値であり、dryrun で得られた key や sql を後で実行する場合は注意を払わなければならない。

# `['category' => 'misc']` の世界でレコードが3行になる。指定した3行が無ければ作成され、有るなら更新され、id 指定している 1,2,3 以外のレコードは削除される $db->changeArray('table_name', [ ['id' => 1, 'name' => 'hoge'], ['id' => 2, 'name' => 'fuga'], ['id' => 3, 'name' => 'piyo'], ], ['category' => 'misc']); // DELETE FROM table_name WHERE (category = 'misc') AND (NOT (id IN ('1', '2', '3'))) // BULK MERGE をサポートしている場合、下記がカラムの種類ごとに発行される // INSERT INTO table_name (id, name) VALUES // ('1', 'hoge'), // ('2', 'fuga'), // ('3', 'piyo') // ON DUPLICATE KEY UPDATE // id = VALUES(id), // name = VALUES(name) // // merge をサポートしている場合、下記がカラムの種類ごとに発行される(merge は疑似クエリ) // [prepare] INSERT INTO table_name (id, name) VALUES (?, ?) ON UPDATE id = VALUES(id), name = VALUES(name) // [execute] INSERT INTO table_name (id, name) VALUES (1, 'hoge') ON UPDATE id = VALUES(id), name = VALUES(name) // [execute] INSERT INTO table_name (id, name) VALUES (2, 'fuga') ON UPDATE id = VALUES(id), name = VALUES(name) // [execute] INSERT INTO table_name (id, name) VALUES (3, 'piyo') ON UPDATE id = VALUES(id), name = VALUES(name) // // merge をサポートしていない場合、全行分 select して行が無ければ insert, 行が有れば update する // SELECT EXISTS (SELECT * FROM table_name WHERE id = '1') // UPDATE table_name SET name = 'hoge' WHERE id = '1' // SELECT EXISTS (SELECT * FROM table_name WHERE id = '2') // UPDATE table_name SET name = 'fuga' WHERE id = '2' // SELECT EXISTS (SELECT * FROM table_name WHERE id = '3') // INSERT INTO table_name (id, name) VALUES ('3', 'piyo') // $returning に配列を与えると RETURNING 的動作になる(この場合作用行の id, name を返す) $result = $db->changeArray('table_name', [ ['id' => 1, 'name' => 'changed'], // 更新 ['id' => 2, 'name' => 'hoge'], // 未更新 ['id' => null, 'name' => 'fuga'], // 作成 ], ['category' => 'misc'], // category=misc の世界で他のものを削除 ['id', 'name']); // 返り値として id, name を返す result: [ ['id' => 1, 'name' => 'base', '' => 2], // 更新された行は 2(このとき、 name は更新前の値であり 'changed' ではない) ['id' => 2, 'name' => 'hoge', '' => 0], // 更新されてない行は 0(mysql のみ) ['id' => 5, 'name' => 'fuga', '' => 1], // 作成された行は 1(このとき、主キーも設定されて返ってくる) ['id' => 8, 'name' => 'piyo', '' => -1], // 削除された行は -1 ]
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array $dataarray カラムデータ配列あるいは Generator
​array|​mixed $where 束縛条件。 false を与えると DELETE 文自体を発行しない(速度向上と安全担保)
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
​?array $returning = [] 返り値の制御変数。配列を与えるとそのカラムの SELECT 結果を返す(null は主キーを表す)
...$opt
Return
type summary
​array 基本的には主キー配列. dryrun 中は SQL をネストして返す

[m] affectArray 各行の method キーに応じた処理を行う

各行の method キーに応じた処理を行う
public function affectArray( string $tableName, array $dataarray, ...$opt ): array

changeArray のメソッド明示版のようなもの。 各行に "@method" のようなものを潜ませるとそのメソッドで各行を操作する。 原則的にDML3兄弟(INSERT,UPDATE,DELETE)のみのサポート(他のメソッドも呼べるようにしてあるが非互換)。

$db->affectArray('table_name', [ ['@method' => 'insert', 'id' => 1, 'name' => 'hoge'], // 特に変わったことはない普通の INSERT ['@method' => 'update', 'id' => 2, 'name' => 'fuga'], // 主キーとデータを分離して UPDATE ['@method' => 'delete', 'id' => 3, 'name' => 'piyo'], // 主キーのみ有効で他は無視して DELETE ]); // DELETE FROM table_name WHERE (id = 3) // UPDATE table_name SET name = 'fuga' WHERE (id = 2) // INSERT INTO tablename (id, name) VALUES ('1', 'hoge')
Parameter
type name summary
​string $tableName テーブル名
​array $dataarray カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array 基本的には主キー配列. dryrun 中は SQL をネストして返す

[m] save 自身 modify + 子テーブルの changeArray を行う

自身 modify + 子テーブルの changeArray を行う
public function save( string|array $tableName, array $data, ...$opt ): array|string[]

フレームワークや ORM における save に近い。 自身に関しては単純に「有ったら update/無かったら insert」を行い、キーが子テーブルである場合はさらにそれで changeArray する。 changeArray なので自身以外の興味の範囲外のレコードは消え去る。 つまりいわゆる「関連テーブルも含めた保存」になる。

ネスト可能。「親に紐づく子に紐づく孫レコード」も再帰的に処理される。

# 親 -> 子 -> 孫を処理 $db->save('t_parent', [ 'parent_name' => 'parent1', 't_child' => [ [ 'child_name' => 'child11', 't_grand' => [ [ 'grand_name' => 'grand111', ], [ 'grand_name' => 'grand112', ], ], ], [ 'child_name' => 'child12', 't_grand' => [ [ 'grand_name' => 'grand121', ], [ 'grand_name' => 'grand122', ], ], ], ], ]); # まずはメインである親が modify される // INSERT INTO // t_parent(parent_id, parent_name) // VALUES // (1, 'parent1') // ON DUPLICATE KEY UPDATE // parent_id = VALUES(parent_id), // parent_name = VALUES(parent_name) # 次に子が changeArray される // INSERT INTO // t_child(child_id, child_name, parent_id) // VALUES // (1, 'child11', 60), // (2, 'child12', 60) // ON DUPLICATE KEY UPDATE // child_id = VALUES(child_id), // child_name = VALUES(child_name), // parent_id = VALUES(parent_id) // changeArray で興味のない行は吹き飛ぶ // DELETE FROM t_child WHERE (t_child.parent_id IN(1)) AND (NOT(t_child.child_id IN(1, 2))) # 最後に孫が changeArray される // INSERT INTO // t_grand(grand_id, grand_name, child_id) // VALUES // (1, 'grand111', 1), // (2, 'grand112', 1), // (3, 'grand121', 2), // (4, 'grand122', 2) // ON DUPLICATE KEY UPDATE // grand_id = VALUES(grand_id), // grand_name = VALUES(grand_name), // child_id = VALUES(child_id) // changeArray で興味のない行は吹き飛ぶ // DELETE FROM t_grand WHERE (t_grand.child_id IN(1, 2)) AND (NOT(t_grand.grand_id IN(1, 2, 3, 4)))
Parameter
type name summary
​string|​array $tableName テーブル名
​array $data 階層を持ったデータ配列
...$opt
Return
type summary
​array|​string[] 基本的には階層を持った主キー配列. dryrun 中は文字列配列

[m] insert INSERT 構文

INSERT 構文
public function insert( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): int|array|string[]|ryunosuke\dbml\Query\Statement
# シンプルに1行 INSERT $db->insert('tablename', [ 'id' => 1, 'name' => 'hoge', ]); // INSERT INTO tablename (id, name) VALUES ('1', 'hoge') # TableDescriptor を渡すとカラムとデータを別に与えられる $db->insert('tablename.name', 'hoge'); // INSERT INTO tablename (name) VALUES ('hoge') $db->insert('tablename.id, name', ['2', 'hoge']); // INSERT INTO tablename (id, name) VALUES ('2', 'hoge') # TableDescriptor で where を与えると条件付き INSERT になる $db->insert('tablename.name[id:3]', ['name' => 'hoge']); // INSERT INTO tablename (name) SELECT 'zzz' WHERE (NOT EXISTS (SELECT * FROM test WHERE id = '3'))
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data INSERT データ配列
...$opt
Return
type summary
​int|​array|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] insertOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insert()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insert()
public function insertOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data INSERT データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::insertOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::insert()")

[m] insertAndPrimary 主キーを返す ryunosuke\dbml\Database::insert()")

主キーを返す ryunosuke\dbml\Database::insert()
public function insertAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data INSERT データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::insertAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::insert()")

[m] update UPDATE 構文

UPDATE 構文
public function update( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
# シンプルに1行 UPDATE $db->update('tablename', [ 'name' => 'hoge', ], ['id' => 1]); // UPDATE tablename SET name = 'hoge' WHERE id = '1' # TableDescriptor を渡すとカラムとデータを別に与えたり条件を埋め込むことができる $db->update('tablename[id: 2].name', 'hoge'); // UPDATE tablename SET name = 'hoge' WHERE id = '2'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] updateOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::update()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::update()
public function updateOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::updateOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::update()")

[m] updateAndPrimary 主キーを返す ryunosuke\dbml\Database::update()")

主キーを返す ryunosuke\dbml\Database::update()
public function updateAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::updateAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::update()")

[m] updateAndBefore レコードを返す ryunosuke\dbml\Database::update()")

レコードを返す ryunosuke\dbml\Database::update()
public function updateAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::updateAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::update()")

[m] delete DELETE 構文

DELETE 構文
public function delete( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

仮想外部キーの CASCADE や SET NULL の実行も行われる(1階層のみ)。

# シンプルに1行 DELETE $db->delete('tablename', ['id' => 1]); // DELETE FROM tablename WHERE id = '1' # TableDescriptor を渡すと条件を埋め込むことができる $db->delete('tablename[id: 2]'); // DELETE FROM tablename WHERE id = '2'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] deleteOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::delete()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::delete()
public function deleteOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::deleteOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::delete()")

[m] deleteAndPrimary 主キーを返す ryunosuke\dbml\Database::delete()")

主キーを返す ryunosuke\dbml\Database::delete()
public function deleteAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::deleteAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::delete()")

[m] deleteAndBefore レコードを返す ryunosuke\dbml\Database::delete()")

レコードを返す ryunosuke\dbml\Database::delete()
public function deleteAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::deleteAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::delete()")

[m] invalid 論理削除構文

論理削除構文
public function invalid( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where, ?array $invalid_columns = null, ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

指定された論理削除カラムを更新する。 簡単に言えば「単に指定カラムを更新する update メソッド」に近いが、下記のように外部キーを見て無効化が伝播する。

RESTRICT/NO ACTION
紐づく子テーブルレコードが無効でない場合、例外を投げる
CASCADE
紐づく子テーブルレコードも無効にする

「無効化」の定義は $invalid_columns で与えるカラムで決まる。 $invalid_columns = ['delete_at' => fn() => date('Y-m-d H:i:s')] のように指定すれば delete_at が現在日時で UPDATE される。 $invalid_columns は全テーブルで共通であるが、null を与えると TableGateway::invalidColumn() -> defaultInvalidColumn オプション の優先順位で自動指定される。

「無効」の定義は「指定カラムが NULL でない」こと(指定カラムが NULL = 有効状態)。 いわゆるフラグで delete_flg=0 としても無効であることに留意。

相互参照外部キーでかつそれらが共に「RESTRICT/NO ACTION」だと無限ループになるので注意。 (そのような外部キーはおかしいと思うので特にチェックしない)。

# childtable -> parenttable に CASCADE な外部キーがある場合 $db->invalid('parenttable', ['parent_id' => 1], ['delete_at' => date('Y-m-d H:i:s')]); // UPDATE childtable SET delete_at = '2014-12-24 12:34:56' WHERE (parent_id) IN (SELECT parenttable.parent_id FROM parenttable WHERE parenttable.parent_id = 1) // UPDATE parenttable SET delete_at = '2014-12-24 12:34:56' WHERE parenttable.parent_id = 1
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] invalidOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::invalid()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::invalid()
public function invalidOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::invalidOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::invalid()")

[m] invalidAndPrimary 主キーを返す ryunosuke\dbml\Database::invalid()")

主キーを返す ryunosuke\dbml\Database::invalid()
public function invalidAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::invalidAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::invalid()")

[m] invalidAndBefore レコードを返す ryunosuke\dbml\Database::invalid()")

レコードを返す ryunosuke\dbml\Database::invalid()
public function invalidAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::invalidAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::invalid()")

[m] revise UPDATE 構文(RESTRICT/NO ACTION を除外)

UPDATE 構文(RESTRICT/NO ACTION を除外)
public function revise( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

CASCADE/SET NULL はむしろ「消えて欲しい/NULL になって欲しい」状況だと考えられるので何も手を加えない。 簡単に言えば「外部キーエラーにならないような」 UPDATE を実行する。

# childtable -> parenttable に RESTRICT な外部キーがある場合 $db->revise('parenttable', ['id' => 2], ['id' => 1]); // UPDATE parenttable SET id = 2 WHERE id = 1 AND (NOT EXISTS (SELECT * FROM childtable WHERE parenttable.id = childtable.parent_id))
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] reviseOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::revise()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::revise()
public function reviseOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::reviseOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::revise()")

[m] reviseAndPrimary 主キーを返す ryunosuke\dbml\Database::revise()")

主キーを返す ryunosuke\dbml\Database::revise()
public function reviseAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::reviseAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::revise()")

[m] reviseAndBefore レコードを返す ryunosuke\dbml\Database::revise()")

レコードを返す ryunosuke\dbml\Database::revise()
public function reviseAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::reviseAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::revise()")

[m] upgrade UPDATE 構文(RESTRICT/NO ACTION も更新)

UPDATE 構文(RESTRICT/NO ACTION も更新)
public function upgrade( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

RESTRICT/NO ACTION な子テーブルレコードを先に更新してから実行する。 簡単に言えば「外部キーエラーにならないようにしてから」 UPDATE を実行する。

実質的には RESTRICT/NO ACTION を無視して CASCADE 的な動作と同等なので注意して使用すべき。 (RESTRICT/NO ACTION にしているのには必ず理由があるはず)。

相互参照外部キーでかつそれらが共に「RESTRICT/NO ACTION」だと無限ループになるので注意。 (そのような外部キーはおかしいと思うので特にチェックしない)。

さらに、複合カラム外部キーだと行値式 IN を使うので SQLServer では実行できない。また、 mysql 5.6 以下ではインデックスが効かないので注意。 単一カラム外部キーなら問題ない。

# childtable -> parenttable に RESTRICT な外部キーがある場合 $db->upgrade('parenttable', ['pk' => 2], ['pk' => 1]); // UPDATE childtable SET fk = 2 WHERE (cid) IN (parenttable id FROM parenttable WHERE pk = 1) // UPDATE FROM parenttable SET pk = 2 WHERE pk = 1
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] upgradeOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upgrade()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upgrade()
public function upgradeOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::upgradeOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upgrade()")

[m] upgradeAndPrimary 主キーを返す ryunosuke\dbml\Database::upgrade()")

主キーを返す ryunosuke\dbml\Database::upgrade()
public function upgradeAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::upgradeAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::upgrade()")

[m] upgradeAndBefore レコードを返す ryunosuke\dbml\Database::upgrade()")

レコードを返す ryunosuke\dbml\Database::upgrade()
public function upgradeAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::upgradeAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::upgrade()")

[m] remove DELETE 構文(RESTRICT/NO ACTION を除外)

DELETE 構文(RESTRICT/NO ACTION を除外)
public function remove( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

CASCADE/SET NULL はむしろ「消えて欲しい/NULL になって欲しい」状況だと考えられるので何も手を加えない。 簡単に言えば「外部キーエラーにならないような」 DELETE を実行する。

# childtable -> parenttable に RESTRICT な外部キーがある場合 $db->remove('parenttable', ['id' => 1]); // DELETE FROM parenttable WHERE id = '1' AND (NOT EXISTS (SELECT * FROM childtable WHERE parenttable.id = childtable.parent_id))
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] removeOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::remove()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::remove()
public function removeOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::removeOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::remove()")

[m] removeAndPrimary 主キーを返す ryunosuke\dbml\Database::remove()")

主キーを返す ryunosuke\dbml\Database::remove()
public function removeAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::removeAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::remove()")

[m] removeAndBefore レコードを返す ryunosuke\dbml\Database::remove()")

レコードを返す ryunosuke\dbml\Database::remove()
public function removeAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::removeAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::remove()")

[m] destroy DELETE 構文(RESTRICT/NO ACTION も削除)

DELETE 構文(RESTRICT/NO ACTION も削除)
public function destroy( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

RESTRICT/NO ACTION な子テーブルレコードを先に削除してから実行する。 簡単に言えば「外部キーエラーにならないようにしてから」 DELETE を実行する。

実質的には RESTRICT/NO ACTION を無視して CASCADE 的な動作と同等なので注意して使用すべき。 (RESTRICT/NO ACTION にしているのには必ず理由があるはず)。

相互参照外部キーでかつそれらが共に「RESTRICT/NO ACTION」だと無限ループになるので注意。 (そのような外部キーはおかしいと思うので特にチェックしない)。

さらに、複合カラム外部キーだと行値式 IN を使うので SQLServer では実行できない。また、 mysql 5.6 以下ではインデックスが効かないので注意。 単一カラム外部キーなら問題ない。

# childtable -> parenttable に RESTRICT な外部キーがある場合 $db->destroy('parenttable', ['status' => 'deleted']); // DELETE FROM childtable WHERE (cid) IN (parenttable id FROM parenttable WHERE status = 'deleted') // DELETE FROM parenttable WHERE status = 'deleted'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] destroyOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::destroy()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::destroy()
public function destroyOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::destroyOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::destroy()")

[m] destroyAndPrimary 主キーを返す ryunosuke\dbml\Database::destroy()")

主キーを返す ryunosuke\dbml\Database::destroy()
public function destroyAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::destroyAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::destroy()")

[m] destroyAndBefore レコードを返す ryunosuke\dbml\Database::destroy()")

レコードを返す ryunosuke\dbml\Database::destroy()
public function destroyAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::destroyAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::destroy()")

[m] reduce DELETE 構文(指定件数を残して削除)

DELETE 構文(指定件数を残して削除)
public function reduce( string|ryunosuke\dbml\Query\TableDescriptor $tableName, ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

$orderBy の順番で $limit 件残すように DELETE を発行する。 $groupBy を指定するとそのグルーピングの世界で $limit 件残すようにそれぞれ削除する。 条件を指定した場合や同値が存在した場合、指定件数より残ることがあるが、少なくなることはない。

$orderBy は単一しか対応していない(大抵の場合は日付的なカラムの単一指定のはず)。 "+column" のように + を付与すると昇順、 "-column" のように - を付与すると降順になる(未指定時は昇順)。 一応 ['column' => true] のような orderBy 指定にも対応している。

削除には行値式 IN を使うので SQLServer では実行できない。また、 mysql 5.6 以下ではインデックスが効かないので注意。 単一主キーなら問題ない。

# logs テーブルから log_time の降順で 10 件残して削除 $db->reduce('logs', 10, '-log_time'); # logs テーブルから log_time の降順でカテゴリごとに 10 件残して削除 $db->reduce('logs', 10, '-log_time', ['category']); # logs テーブルから log_time の降順でカテゴリごとに 10 件残して削除するが直近1ヶ月は残す(1ヶ月以上前を削除対象とする) $db->reduce('logs', 10, '-log_time', ['category'], ['log_time < ?' => date('Y-m-d', strtotime('now -1 month'))]);
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] reduceOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::reduce()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::reduce()
public function reduceOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::reduceOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::reduce()")

[m] reduceAndBefore レコードを返す ryunosuke\dbml\Database::reduce()")

レコードを返す ryunosuke\dbml\Database::reduce()
public function reduceAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectAndBeforeTrait::reduceAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::reduce()")

[m] upsert 行が無かったら INSERT、有ったら UPDATE

行が無かったら INSERT、有ったら UPDATE
public function upsert( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

アプリレイヤーで INSERT し、エラーが起きたら UPDATE へフォールバックする。

OrThrow 版の戻り値は「本当に更新した主キー配列」になる。 下記のパターンがある。

  • insert が成功した (≒ lastInsertId を含む主キーを返す)
  • update を行った (= 存在した行の主キーを返す)
  • update で主キーも含めて更新を行った (= 存在した行の更新後の主キーを返す)

言い換えれば「更新したその行にアクセスするに足る主キー配列」を返す。

# id 的列が指定されていないかつ AUTOINCREMENT の場合は INSERT 確定となる $db->upsert('tablename', ['name' => 'hoge']); // INSERT INTO tablename (name) VALUES ('piyo') -- 連番は AUTOINCREMENT # id 的列が指定されているか AUTOINCREMENT でない場合は SELECT EXISTS でチェックする $db->upsert('tablename', ['id' => 1, 'name' => 'hoge']); // SELECT EXISTS (SELECT * FROM tablename WHERE id = '1') // 存在しない: INSERT INTO tablename (id, name) VALUES ('1', 'hoge') // 存在する: UPDATE tablename SET name = 'hoge' WHERE id = '1'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] upsertOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upsert()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upsert()
public function upsertOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::upsertOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::upsert()")

[m] upsertAndPrimary 主キーを返す ryunosuke\dbml\Database::upsert()")

主キーを返す ryunosuke\dbml\Database::upsert()
public function upsertAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::upsertAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::upsert()")

[m] upsertAndBefore レコードを返す ryunosuke\dbml\Database::upsert()")

レコードを返す ryunosuke\dbml\Database::upsert()
public function upsertAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::upsertAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::upsert()")

[m] modify MERGE 構文

MERGE 構文
public function modify( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

RDBMS で方言・効果がかなり激しい。

  • sqlite: INSERT ~ ON CONFLICT(...) DO UPDATE が実行される
  • mysql: INSERT ~ ON DUPLICATE KEY が実行される
  • postgresql: INSERT ~ ON CONFLICT(...) DO UPDATE が実行される
  • sqlserver: MERGE があるが複雑すぎるので ryunosuke\dbml\Database::upsert() に委譲される
# シンプルな INSERT ~ ON DUPLICATE KEY $db->modify('tablename', [ 'id' => 1, 'name' => 'hoge', ]); // INSERT INTO tablename SET id = '1', name = 'hoge' ON DUPLICATE KEY UPDATE id = VALUES(id), name = VALUES(name) # $updateData で更新時のデータを指定できる $db->modify('tablename', [ 'id' => 1, 'name' => 'hoge', ], ['name' => 'fuga']); // INSERT INTO tablename SET id = '1', name = 'hoge' ON DUPLICATE KEY UPDATE name = 'fuga' # $updateData に ['*' => ?callable] を渡すと $updateData に無いカラムが $insertData を元にコールバックされる # 分かりにくいが要するに「$insertData の一部だけを書き換えて $updateData にすることができる」ということ $db->modify('tablename', [ 'id' => 1, 'name' => 'hoge', 'data' => 'on insert data', ], ['*' => fn($column, $insertData) => $insertData[$column], 'data' => 'on update data']); // INSERT INTO tablename SET // id = '1', name = 'hoge', data = 'on insert data' // ON DUPLICATE KEY UPDATE // id = '1', name = 'hoge', data = 'on update data' # ただし、実際は値を直接使うのではなく参照構文(mysql の VALUES など)を使うだろうので、null を渡すと自動で使用される $db->modify('tablename', [ 'id' => 1, 'name' => 'hoge', 'data' => 'on insert data', ], ['*' => null, 'data' => 'on update data']); // INSERT INTO tablename SET // id = '1', name = 'hoge', data = 'on insert data' // ON DUPLICATE KEY UPDATE // id = VALUES(id), name = VALUES(name), data = 'on update data'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] modifyOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::modify()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::modify()
public function modifyOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::modifyOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::modify()")

[m] modifyAndPrimary 主キーを返す ryunosuke\dbml\Database::modify()")

主キーを返す ryunosuke\dbml\Database::modify()
public function modifyAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::modifyAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::modify()")

[m] modifyAndBefore レコードを返す ryunosuke\dbml\Database::modify()")

レコードを返す ryunosuke\dbml\Database::modify()
public function modifyAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::modifyAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::modify()")

[m] replace REPLACE 構文

REPLACE 構文
public function replace( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement

標準のよくある REPLACE とは違って、元のカラム値は維持される。 ただし、REPLACE であることに変わりはないので DELETE -> INSERT されるため外部キー(特に CASCADE DELETE) に注意。

# シンプルな REPLACE $db->replace('tablename', [ 'id' => 1, 'name' => 'hoge', ]); // REPLACE INTO tablename (id, name, othercolumn) SELECT '1', 'hoge', othercolumn FROM (SELECT NULL) __T LEFT JOIN tablename ON id = '1'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] replaceOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::replace()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::replace()
public function replaceOrThrow( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::replaceOrThrowWithTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Database::replace()")

[m] replaceAndPrimary 主キーを返す ryunosuke\dbml\Database::replace()")

主キーを返す ryunosuke\dbml\Database::replace()
public function replaceAndPrimary( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::replaceAndPrimaryWithTable() 主キーを返す ryunosuke\dbml\Database::replace()")

[m] replaceAndBefore レコードを返す ryunosuke\dbml\Database::replace()")

レコードを返す ryunosuke\dbml\Database::replace()
public function replaceAndBefore( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::replaceAndBeforeWithTable() レコードを返す ryunosuke\dbml\Database::replace()")

[m] duplicate 行を複製する

行を複製する
public function duplicate( string|ryunosuke\dbml\Query\TableDescriptor $tableName, array $overrideData = [], array|mixed $where = [], ?string $sourceTable = null ): int|string[]|ryunosuke\dbml\Query\Statement
# 最もシンプルな例。単純に tablename のレコードが2倍になる(主キーが重複してしまうので AUTOINCREMENT の場合のみ) $db->duplicate('tablename'); // INSERT INTO tablename (name, other_columns) SELECT name AS name, other_columns AS other_columns FROM tablename # 複製データと条件を指定して複製 $db->duplicate('tablename', [ 'name' => 'copied', ], ['id' => 1]); // INSERT INTO tablename (name, other_columns) SELECT 'copied' AS name, other_columns AS other_columns FROM tablename WHERE id = '1'
Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​array $overrideData = [] selectしたデータを上書きするデータ
​array|​mixed $where = [] 検索条件
​?string $sourceTable = null 元となるテーブル名。省略すると $targetTable と同じになる
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] truncate TRUNCATE 構文

TRUNCATE 構文
public function truncate( string $tableName, bool $cascade = false ): int|string[]|ryunosuke\dbml\Query\Statement
$db->truncate('tablename'); // TRUNCATE tablename
Parameter
type name summary
​string $tableName テーブル名
​bool $cascade = false CASCADE フラグ。PostgreSql の場合のみ有効
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] eliminate TRUNCATE 構文(子テーブルも削除)

TRUNCATE 構文(子テーブルも削除)
public function eliminate(string $tableName): int|string[]|ryunosuke\dbml\Query\Statement
$db->eliminate('parenttable'); // TRUNCATE childtable // TRUNCATE parenttable
Parameter
type name summary
​string $tableName テーブル名
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] getLastInsertId 最後に挿入した ID を返す

最後に挿入した ID を返す
public function getLastInsertId( ?string $tableName = null, ?string $columnName = null ): string|int|null

dryrun 中は max+1 から始まる連番を返す。

Parameter
type name summary
​?string $tableName = null
​?string $columnName = null
Return
type summary
​string|​int|​null

[m] resetAutoIncrement 自動採番列をリセットする

自動採番列をリセットする
public function resetAutoIncrement( string $tableName, ?int $seq = 1 )

$seq に null を与えるとMAX+1になる。

Parameter
type name summary
​string $tableName
​?int $seq = 1

[m] getAffectedRows 最後に更新した行数を返す

最後に更新した行数を返す
public function getAffectedRows(): ?int

実行していない or 直前のクエリが失敗していた場合は null を返す。

Return
type summary
​?int

[m] isAffected 1回でも更新操作をしたかを返す

1回でも更新操作をしたかを返す
public function isAffected(): bool

例えば master/slave 構成でこのメソッドが true を返した場合、次のリクエストは masterMode:true にした方が良い。 (レプリケーションの遅延などで slave の古いデータを SELECT してしまう可能性がある)。

Return
type summary
​bool

[m] recache キャッシュの破棄と再生成

キャッシュの破棄と再生成
public function recache(bool $force = true): ryunosuke\dbml\Database

デプロイの直後等にこのメソッドを呼べば全キャッシュが生成される。

Parameter
type name summary
​bool $force = true
Return
type summary
Database

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​instead OptionTrait::checkUnknownOption()

[m] create insertOrThrow のエイリアス

insertOrThrow のエイリアス
public function create( string|ryunosuke\dbml\Query\TableDescriptor $tableName, mixed $data, ...$opt ): array|string

updateOrThrow や deleteOrThrow を使う機会はそう多くなく、実質的に主キーを得たいがために insertOrThrow を使うことが多い。 となると対称性がなく、コードリーディング時に余計な思考を挟むことが多い(「なぜ insert だけ OrThrow なんだろう?」)のでエイリアスを用意した。

Parameter
type name summary
​string|​TableDescriptor $tableName テーブル名
​mixed $data INSERT データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::createWithTable() insertOrThrow のエイリアス

[m] getCacheProvider

public function getCacheProvider(): Psr\SimpleCache\CacheInterface
Return
type summary
CacheInterface

[m] getAutoIdentityInsert

public function getAutoIdentityInsert(): bool
Return
type summary
​bool

[m] setAutoIdentityInsert

public function setAutoIdentityInsert(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getDefaultChunk

public function getDefaultChunk(): int|string
Return
type summary
​int|​string

[m] setDefaultChunk

public function setDefaultChunk(mixed $int): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $int
Return
type summary
Database

[m] getDefaultRetry

public function getDefaultRetry(): int
Return
type summary
​int

[m] setDefaultRetry

public function setDefaultRetry(mixed $int): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $int
Return
type summary
Database

[m] getAutoCastType

public function getAutoCastType(): array
Return
type summary
​array

[m] getMasterMode

public function getMasterMode(): bool
Return
type summary
​bool

[m] setMasterMode

public function setMasterMode(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getDynamicPlaceholder

public function getDynamicPlaceholder(): bool
Return
type summary
​bool

[m] setDynamicPlaceholder

public function setDynamicPlaceholder(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getCheckSameKey

public function getCheckSameKey(): string
Return
type summary
​string

[m] setCheckSameKey

public function setCheckSameKey(mixed $string): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $string
Return
type summary
Database

[m] getCheckSameColumn

public function getCheckSameColumn(): string
Return
type summary
​string

[m] setCheckSameColumn

public function setCheckSameColumn(mixed $string): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $string
Return
type summary
Database

[m] getExportClass

public function getExportClass(): array
Return
type summary
​array

[m] setExportClass

public function setExportClass(mixed $array): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $array
Return
type summary
Database

[m] getDefaultIteration ryunosuke\dbml\Gateway\TableGateway::getDefaultIteration()") 参照

ryunosuke\dbml\Gateway\TableGateway::getDefaultIteration() 参照
public function getDefaultIteration(): string
Return
type summary
​string

[m] setDefaultIteration ryunosuke\dbml\Gateway\TableGateway::setDefaultIteration()") 参照

ryunosuke\dbml\Gateway\TableGateway::setDefaultIteration() 参照
public function setDefaultIteration(mixed $iterationMode): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $iterationMode
Return
type summary
Database

[m] getDefaultJoinMethod ryunosuke\dbml\Gateway\TableGateway::getDefaultJoinMethod()") 参照

ryunosuke\dbml\Gateway\TableGateway::getDefaultJoinMethod() 参照
public function getDefaultJoinMethod(): string
Return
type summary
​string

[m] setDefaultJoinMethod ryunosuke\dbml\Gateway\TableGateway::setDefaultJoinMethod()") 参照

ryunosuke\dbml\Gateway\TableGateway::setDefaultJoinMethod() 参照
public function setDefaultJoinMethod(mixed $string): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $string
Return
type summary
Database

[m] getDefaultOrder ryunosuke\dbml\Query\SelectBuilder::getDefaultOrder()") 参照

ryunosuke\dbml\Query\SelectBuilder::getDefaultOrder() 参照
public function getDefaultOrder(): mixed
Return
type summary
​mixed

[m] setDefaultOrder ryunosuke\dbml\Query\SelectBuilder::setDefaultOrder()") 参照

ryunosuke\dbml\Query\SelectBuilder::setDefaultOrder() 参照
public function setDefaultOrder(mixed $mixed): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $mixed
Return
type summary
Database

[m] getPrimarySeparator ryunosuke\dbml\Query\SelectBuilder::getPrimarySeparator()") 参照

ryunosuke\dbml\Query\SelectBuilder::getPrimarySeparator() 参照
public function getPrimarySeparator(): string
Return
type summary
​string

[m] setPrimarySeparator ryunosuke\dbml\Query\SelectBuilder::setPrimarySeparator()") 参照

ryunosuke\dbml\Query\SelectBuilder::setPrimarySeparator() 参照
public function setPrimarySeparator(mixed $string): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $string
Return
type summary
Database

[m] getAggregationDelimiter ryunosuke\dbml\Query\SelectBuilder::getAggregationDelimiter()") 参照

ryunosuke\dbml\Query\SelectBuilder::getAggregationDelimiter() 参照
public function getAggregationDelimiter(): string
Return
type summary
​string

[m] setAggregationDelimiter ryunosuke\dbml\Query\SelectBuilder::setAggregationDelimiter()") 参照

ryunosuke\dbml\Query\SelectBuilder::setAggregationDelimiter() 参照
public function setAggregationDelimiter(mixed $string): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $string
Return
type summary
Database

[m] getPropagateLockMode ryunosuke\dbml\Query\SelectBuilder::getPropagateLockMode()") 参照

ryunosuke\dbml\Query\SelectBuilder::getPropagateLockMode() 参照
public function getPropagateLockMode(): bool
Return
type summary
​bool

[m] setPropagateLockMode ryunosuke\dbml\Query\SelectBuilder::setPropagateLockMode()") 参照

ryunosuke\dbml\Query\SelectBuilder::setPropagateLockMode() 参照
public function setPropagateLockMode(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getInjectChildColumn ryunosuke\dbml\Query\SelectBuilder::getInjectChildColumn()") 参照

ryunosuke\dbml\Query\SelectBuilder::getInjectChildColumn() 参照
public function getInjectChildColumn(): bool
Return
type summary
​bool

[m] setInjectChildColumn ryunosuke\dbml\Query\SelectBuilder::setInjectChildColumn()") 参照

ryunosuke\dbml\Query\SelectBuilder::setInjectChildColumn() 参照
public function setInjectChildColumn(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getInsertSet ryunosuke\dbml\Query\AffectBuilder::getInsertSet()") 参照

ryunosuke\dbml\Query\AffectBuilder::getInsertSet() 参照
public function getInsertSet(): bool
Return
type summary
​bool

[m] setInsertSet ryunosuke\dbml\Query\AffectBuilder::setInsertSet()") 参照

ryunosuke\dbml\Query\AffectBuilder::setInsertSet() 参照
public function setInsertSet(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getUpdateEmpty ryunosuke\dbml\Query\AffectBuilder::getUpdateEmpty()") 参照

ryunosuke\dbml\Query\AffectBuilder::getUpdateEmpty() 参照
public function getUpdateEmpty(): bool
Return
type summary
​bool

[m] setUpdateEmpty ryunosuke\dbml\Query\AffectBuilder::setUpdateEmpty()") 参照

ryunosuke\dbml\Query\AffectBuilder::setUpdateEmpty() 参照
public function setUpdateEmpty(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getDefaultInvalidColumn ryunosuke\dbml\Query\AffectBuilder::getDefaultInvalidColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::getDefaultInvalidColumn() 参照
public function getDefaultInvalidColumn(): array
Return
type summary
​array

[m] setDefaultInvalidColumn ryunosuke\dbml\Query\AffectBuilder::setDefaultInvalidColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::setDefaultInvalidColumn() 参照
public function setDefaultInvalidColumn(mixed $array): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $array
Return
type summary
Database

[m] getFilterNoExistsColumn ryunosuke\dbml\Query\AffectBuilder::getFilterNoExistsColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::getFilterNoExistsColumn() 参照
public function getFilterNoExistsColumn(): bool
Return
type summary
​bool

[m] setFilterNoExistsColumn ryunosuke\dbml\Query\AffectBuilder::setFilterNoExistsColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::setFilterNoExistsColumn() 参照
public function setFilterNoExistsColumn(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getFilterNullAtNotNullColumn ryunosuke\dbml\Query\AffectBuilder::getFilterNullAtNotNullColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::getFilterNullAtNotNullColumn() 参照
public function getFilterNullAtNotNullColumn(): bool
Return
type summary
​bool

[m] setFilterNullAtNotNullColumn ryunosuke\dbml\Query\AffectBuilder::setFilterNullAtNotNullColumn()") 参照

ryunosuke\dbml\Query\AffectBuilder::setFilterNullAtNotNullColumn() 参照
public function setFilterNullAtNotNullColumn(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getConvertEmptyToNull ryunosuke\dbml\Query\AffectBuilder::getConvertEmptyToNull()") 参照

ryunosuke\dbml\Query\AffectBuilder::getConvertEmptyToNull() 参照
public function getConvertEmptyToNull(): bool
Return
type summary
​bool

[m] setConvertEmptyToNull ryunosuke\dbml\Query\AffectBuilder::setConvertEmptyToNull()") 参照

ryunosuke\dbml\Query\AffectBuilder::setConvertEmptyToNull() 参照
public function setConvertEmptyToNull(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getConvertBoolToInt ryunosuke\dbml\Query\AffectBuilder::getConvertBoolToInt()") 参照

ryunosuke\dbml\Query\AffectBuilder::getConvertBoolToInt() 参照
public function getConvertBoolToInt(): bool
Return
type summary
​bool

[m] setConvertBoolToInt ryunosuke\dbml\Query\AffectBuilder::setConvertBoolToInt()") 参照

ryunosuke\dbml\Query\AffectBuilder::setConvertBoolToInt() 参照
public function setConvertBoolToInt(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getConvertNumericToDatetime ryunosuke\dbml\Query\AffectBuilder::getConvertNumericToDatetime()") 参照

ryunosuke\dbml\Query\AffectBuilder::getConvertNumericToDatetime() 参照
public function getConvertNumericToDatetime(): bool
Return
type summary
​bool

[m] setConvertNumericToDatetime ryunosuke\dbml\Query\AffectBuilder::setConvertNumericToDatetime()") 参照

ryunosuke\dbml\Query\AffectBuilder::setConvertNumericToDatetime() 参照
public function setConvertNumericToDatetime(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[m] getTruncateString ryunosuke\dbml\Query\AffectBuilder::getTruncateString()") 参照

ryunosuke\dbml\Query\AffectBuilder::getTruncateString() 参照
public function getTruncateString(): bool
Return
type summary
​bool

[m] setTruncateString ryunosuke\dbml\Query\AffectBuilder::setTruncateString()") 参照

ryunosuke\dbml\Query\AffectBuilder::setTruncateString() 参照
public function setTruncateString(mixed $bool): ryunosuke\dbml\Database
Parameter
type name summary
​mixed $bool
Return
type summary
Database

[N] ryunosuke\dbml\Attribute\

[C] AbstractAttribute

Hierarchy

Parents
type summary
AbstractAttribute

[M] arrayOf

public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​array|​ReflectionAttribute[]
Prototype
kind source summary
​inherit AbstractAttribute::arrayOf()

[M] of

public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​?ReflectionAttribute
Prototype
kind source summary
​inherit AbstractAttribute::of()

[C] AssumeType

Hierarchy

Parents
type summary
AbstractAttribute
AbstractAttribute

[m] __construct

public function __construct(string ...$types)
Parameter
type name summary
​string ...$types

[m] type

public function type(array $typeMap): string
Parameter
type name summary
​array $typeMap
Return
type summary
​string

[M] arrayOf

public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​array|​ReflectionAttribute[]
Prototype
kind source summary
​inherit AbstractAttribute::arrayOf()

[M] of

public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​?ReflectionAttribute
Prototype
kind source summary
​inherit AbstractAttribute::of()

[C] VirtualColumn

Hierarchy

Parents
type summary
AbstractAttribute
AbstractAttribute

[m] __construct

public function __construct( ?string $type = null, bool $lazy = true, bool $implicit = false )
Parameter
type name summary
​?string $type = null
​bool $lazy = true
​bool $implicit = false

[M] arrayOf

public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​array|​ReflectionAttribute[]
Prototype
kind source summary
​inherit AbstractAttribute::arrayOf()

[M] of

public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
Parameter
type name summary
$reflector
​int $flags = 0
Return
type summary
​?ReflectionAttribute
Prototype
kind source summary
​inherit AbstractAttribute::of()

[N] ryunosuke\dbml\Driver\

[C] ArrayResult

Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[m] __construct

public function __construct( array $data, array $metadata )
Parameter
type name summary
​array $data
​array $metadata

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): array|false
Return
type summary
​array|​false
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative Returns the next row of the result as an associative array or FALSE if there are no more rows.

Returns the next row of the result as an associative array or FALSE if there are no more rows.
public function fetchAssociative(): array|false
Return
type summary
​array|​false
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchAssociative() Returns the next row of the result as an associative array or FALSE if there are no more rows.
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed
Return
type summary
​mixed
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative Returns an array containing all of the result rows represented as associative arrays.

Returns an array containing all of the result rows represented as associative arrays.
public function fetchAllAssociative(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchAllAssociative() Returns an array containing all of the result rows represented as associative arrays.
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​implement Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​implement Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string
Prototype
kind source summary
​instead ResultTrait::doctrineType()

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[C] ConnectionMiddleware

Implements
type summary
Middleware

[m] __construct

public function __construct( \Closure $retryer, array $commands )
Parameter
type name summary
Closure $retryer
​array $commands

[m] wrap

public function wrap(Doctrine\DBAL\Driver $driver): Doctrine\DBAL\Driver
Parameter
type name summary
Driver $driver
Return
type summary
Driver
Prototype
kind source summary
​implement Middleware::wrap()

[T] ResultTrait

Hierarchy

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

[M] doctrineType

public static function doctrineType(string|int $nativeType): ?string
Parameter
type name summary
​string|​int $nativeType
Return
type summary
​?string

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array

[I] ResultInterface

Hierarchy

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
abstract public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string DoctrineType

[m] setSameCheckMethod

abstract public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method

[m] getMetadata

abstract public function getMetadata(): array
Return
type summary
​array

[N] ryunosuke\dbml\Driver\Mysqli\

[C] Result

Hierarchy

Parents
type summary
Result
Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $statement

protected \mysqli_stmt $statement

Type: mysqli_stmt

Prototype
kind source summary
​inherit Result::$statement

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[M] getMetadataFrom

public static function getMetadataFrom(\mysqli_result $result)
Parameter
type name summary
mysqli_result $result

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string
Prototype
kind source summary
​implement ResultInterface::doctrineType() NativeType から DoctrineType への変換
​instead ResultTrait::doctrineType()

[M] mapType

public static function mapType( int $mysqlType, ?string $value ): string|int|float|bool|null
Parameter
type name summary
​int $mysqlType
​?string $value
Return
type summary
​string|​int|​float|​bool|​null

[m] storeResult

public function storeResult()

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] __construct

public function __construct( \mysqli_stmt $statement, ?Doctrine\DBAL\Driver\Mysqli\Statement $statementReference = null )
Parameter
type name summary
mysqli_stmt $statement
​?Statement $statementReference = null
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::__construct()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): list|false
Return
type summary
​list|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false
Prototype
kind source summary
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed|false
Return
type summary
​mixed|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array
Prototype
kind source summary
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​inherit Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[N] ryunosuke\dbml\Driver\PDO\

[C] Result

Hierarchy

Parents
type summary
Result
Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $statement

protected \PDOStatement $statement

Type: PDOStatement

Prototype
kind source summary
​inherit Result::$statement

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[M] getMetadataFrom

public static function getMetadataFrom(\PDOStatement $statement)
Parameter
type name summary
PDOStatement $statement

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType( string|int $nativeType, ?string $driverName = null ): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
​?string $driverName = null
Return
type summary
​?string
Prototype
kind source summary
​implement ResultInterface::doctrineType() NativeType から DoctrineType への変換
​instead ResultTrait::doctrineType()

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] __construct

public function __construct(\PDOStatement $statement)
Parameter
type name summary
PDOStatement $statement
Prototype
kind source summary
​inherit Result::__construct()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): list|false
Return
type summary
​list|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false
Prototype
kind source summary
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed|false
Return
type summary
​mixed|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array
Prototype
kind source summary
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​inherit Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[N] ryunosuke\dbml\Driver\PgSQL\

[C] Result

Hierarchy

Parents
type summary
Result
Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $result

protected PgSqlResult|resource|null $result = null

Type: PgSqlResult|​resource|​null

Prototype
kind source summary
​inherit Result::$result

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[M] getMetadataFrom

public static function getMetadataFrom($statement)
Parameter
type name summary
$statement

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string
Prototype
kind source summary
​implement ResultInterface::doctrineType() NativeType から DoctrineType への変換
​instead ResultTrait::doctrineType()

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] __construct

public function __construct(PgSqlResult|resource $result)
Parameter
type name summary
PgSqlResult|​resource $result
Prototype
kind source summary
​inherit Result::__construct()

[m] __destruct

public function __destruct()
Prototype
kind source summary
​inherit Result::__destruct()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): list|false
Return
type summary
​list|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false
Prototype
kind source summary
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed|false
Return
type summary
​mixed|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array
Prototype
kind source summary
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​inherit Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[M] mapType

public static function mapType( string $postgresType, ?string $value ): string|int|float|bool|null
Parameter
type name summary
​string $postgresType
​?string $value
Return
type summary
​string|​int|​float|​bool|​null
Prototype
kind source summary
​inherit Result::mapType()

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[N] ryunosuke\dbml\Driver\SQLSrv\

[C] Result

Hierarchy

Parents
type summary
Result
Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $statement

protected resource $statement = null

Type: resource

Prototype
kind source summary
​inherit Result::$statement

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[M] getMetadataFrom

public static function getMetadataFrom($statement)
Parameter
type name summary
$statement

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string
Prototype
kind source summary
​implement ResultInterface::doctrineType() NativeType から DoctrineType への変換
​instead ResultTrait::doctrineType()

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] __construct

public function __construct(resource $stmt)
Parameter
type name summary
​resource $stmt
Prototype
kind source summary
​inherit Result::__construct()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): list|false
Return
type summary
​list|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false
Prototype
kind source summary
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed|false
Return
type summary
​mixed|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array
Prototype
kind source summary
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​inherit Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[N] ryunosuke\dbml\Driver\SQLite3\

[C] Result

Hierarchy

Parents
type summary
Result
Implements
type summary
Result Driver-level statement execution result.
ResultInterface
Uses
type summary
ResultTrait

[p] $result

protected ?\SQLite3Result $result

Type: ?SQLite3Result

Prototype
kind source summary
​inherit Result::$result

[p] $checkSameMethod

protected null $checkSameMethod = null

Type: null

Prototype
kind source summary
​instead ResultTrait::$checkSameMethod

[M] getMetadataFrom

public static function getMetadataFrom(\SQLite3Result $result)
Parameter
type name summary
SQLite3Result $result

[M] doctrineType NativeType から DoctrineType への変換

NativeType から DoctrineType への変換
public static function doctrineType(string|int $nativeType): ?string

※ この抽象メソッドはこのコメントを書きたいゆえの宣言であり、インターフェースとしての意味はない

各々の driver から得られる native type がメチャクチャすぎて観測範囲内での最低限の実装となっている。 というのもこれらの型が活きるのは now() などの datetime と精々 json くらいで他の型を活かす機会がそもそもない。 もっと言うと json をリテラルで書くような状況もないため、実質的に datetime 専用となっている。 (正味 now() で DateTime インスタンスを得たいだけ)。

なお Type::convertToPHPValue を使いたいだけなので型のサイズはあまり重要ではない。 重要なのは型そのもので、特に TEXT/BLOB 等はストリーム化されたりするので注意。

ので原則として互換性破壊の担保に入れない。 そもそも native type の網羅が大変すぎるのでかなり気軽に追加する可能性がある。

Parameter
type name summary
​string|​int $nativeType NativeType
Return
type summary
​?string
Prototype
kind source summary
​implement ResultInterface::doctrineType() NativeType から DoctrineType への変換
​instead ResultTrait::doctrineType()

[m] getMetadata

public function getMetadata(): array
Return
type summary
​array
Prototype
kind source summary
​implement ResultInterface::getMetadata()

[m] __construct

public function __construct( \SQLite3Result $result, int $changes )
Parameter
type name summary
SQLite3Result $result
​int $changes
Prototype
kind source summary
​inherit Result::__construct()

[m] fetchNumeric Returns the next row of the result as a numeric array or FALSE if there are no more rows.

Returns the next row of the result as a numeric array or FALSE if there are no more rows.
public function fetchNumeric(): list|false
Return
type summary
​list|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchNumeric() Returns the next row of the result as a numeric array or FALSE if there are no more rows.

[m] fetchAssociative

public function fetchAssociative(): array|false
Return
type summary
​array|​false
Prototype
kind source summary
​instead ResultTrait::fetchAssociative()

[m] fetchOne Returns the first value of the next row of the result or FALSE if there are no more rows.

Returns the first value of the next row of the result or FALSE if there are no more rows.
public function fetchOne(): mixed|false
Return
type summary
​mixed|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchOne() Returns the first value of the next row of the result or FALSE if there are no more rows.

[m] fetchAllNumeric Returns an array containing all of the result rows represented as numeric arrays.

Returns an array containing all of the result rows represented as numeric arrays.
public function fetchAllNumeric(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchAllNumeric() Returns an array containing all of the result rows represented as numeric arrays.

[m] fetchAllAssociative

public function fetchAllAssociative(): array
Return
type summary
​array
Prototype
kind source summary
​instead ResultTrait::fetchAllAssociative()

[m] fetchFirstColumn Returns an array containing the values of the first column of the result.

Returns an array containing the values of the first column of the result.
public function fetchFirstColumn(): array
Return
type summary
​array
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::fetchFirstColumn() Returns an array containing the values of the first column of the result.

[m] rowCount Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
public function rowCount(): int

If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), some database drivers may return the number of rows returned by that query. However, this behaviour is not guaranteed for all drivers and should not be relied on in portable applications.

Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::rowCount() Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.

[m] columnCount Returns the number of columns in the result

Returns the number of columns in the result
public function columnCount(): int
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​inherit Result::columnCount() Returns the number of columns in the result

[m] free Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
public function free()
Prototype
kind source summary
​inherit Result::free() Discards the non-fetched portion of the result, enabling the originating statement to be executed again.

[m] setSameCheckMethod

public function setSameCheckMethod(string $method)
Parameter
type name summary
​string $method
Prototype
kind source summary
​instead ResultTrait::setSameCheckMethod()

[N] ryunosuke\dbml\Entity\

[C] Entity 組み込みのデフォルトエンティティクラス

組み込みのデフォルトエンティティクラス

Implements
type summary
Entityable エンティティであることを示すインターフェース
IteratorAggregate
JsonSerializable
ArrayAccess
Traversable

[m] __call

public function __call( string $name, array $arguments ): mixed
Parameter
type name summary
​string $name
​array $arguments
Return
type summary
​mixed

[m] __isset

public function __isset(string $name): bool
Parameter
type name summary
​string $name
Return
type summary
​bool

[m] __unset

public function __unset(string $name)
Parameter
type name summary
​string $name

[m] __get

public function __get(string $name): mixed
Parameter
type name summary
​string $name
Return
type summary
​mixed

[m] __set

public function __set( string $name, mixed $value )
Parameter
type name summary
​string $name
​mixed $value

[m] offsetExists

public function offsetExists(mixed $offset): bool
Parameter
type name summary
​mixed $offset
Return
type summary
​bool
Prototype
kind source summary
​implement ArrayAccess::offsetExists()

[m] offsetUnset

public function offsetUnset(mixed $offset)
Parameter
type name summary
​mixed $offset
Prototype
kind source summary
​implement ArrayAccess::offsetUnset()

[m] offsetGet

public function offsetGet(mixed $offset): mixed
Parameter
type name summary
​mixed $offset
Return
type summary
​mixed
Prototype
kind source summary
​implement ArrayAccess::offsetGet()

[m] offsetSet

public function offsetSet( mixed $offset, mixed $value )
Parameter
type name summary
​mixed $offset
​mixed $value
Prototype
kind source summary
​implement ArrayAccess::offsetSet()

[m] getIterator

public function getIterator(): \Traversable
Return
type summary
Traversable
Prototype
kind source summary
​implement IteratorAggregate::getIterator()

[m] jsonSerialize

public function jsonSerialize(): array
Return
type summary
​array
Prototype
kind source summary
​implement JsonSerializable::jsonSerialize()

[m] assign 配列からプロパティをセットする

配列からプロパティをセットする
public function assign(array $fields): ryunosuke\dbml\Entity\Entity
Parameter
type name summary
​array $fields
Return
type summary
Entity
Prototype
kind source summary
​implement Entityable::assign() 配列からプロパティをセットする

[m] arrayize 子要素も含めて再帰的に配列化する

子要素も含めて再帰的に配列化する
public function arrayize(): array
Return
type summary
​array
Prototype
kind source summary
​implement Entityable::arrayize() 子要素も含めて再帰的に配列化する

[I] Entityable エンティティであることを示すインターフェース

エンティティであることを示すインターフェース

エンティティとして利用するには必ずこのインターフェースを実装しなければならない。

Hierarchy

Implements
type summary
ArrayAccess

[m] assign 配列からプロパティをセットする

配列からプロパティをセットする
abstract public function assign(array $fields): ryunosuke\dbml\Entity\Entityable
Parameter
type name summary
​array $fields
Return
type summary
Entityable

[m] arrayize 子要素も含めて再帰的に配列化する

子要素も含めて再帰的に配列化する
abstract public function arrayize(): array
Return
type summary
​array

[m] offsetExists

abstract public function offsetExists(mixed $offset)
Parameter
type name summary
​mixed $offset
Prototype
kind source summary
​inherit ArrayAccess::offsetExists()

[m] offsetGet

abstract public function offsetGet(mixed $offset)
Parameter
type name summary
​mixed $offset
Prototype
kind source summary
​inherit ArrayAccess::offsetGet()

[m] offsetSet

abstract public function offsetSet( mixed $offset, mixed $value )
Parameter
type name summary
​mixed $offset
​mixed $value
Prototype
kind source summary
​inherit ArrayAccess::offsetSet()

[m] offsetUnset

abstract public function offsetUnset(mixed $offset)
Parameter
type name summary
​mixed $offset
Prototype
kind source summary
​inherit ArrayAccess::offsetUnset()

[N] ryunosuke\dbml\Exception\

[C] NonAffectedException INSER/UPDATE/DELETE 操作で作用行が無かった時の例外クラス

INSER/UPDATE/DELETE 操作で作用行が無かった時の例外クラス

Hierarchy

Parents
type summary
InvalidCountException 行数系例外の親例外
RuntimeException
Exception
Implements
type summary
Throwable
Stringable

[p] $message

protected string $message = ""

Type: string

Prototype
kind source summary
​inherit Exception::$message

[p] $code

protected int $code = 0

Type: int

Prototype
kind source summary
​inherit Exception::$code

[p] $file

protected string $file = ""

Type: string

Prototype
kind source summary
​inherit Exception::$file

[p] $line

protected int $line = 0

Type: int

Prototype
kind source summary
​inherit Exception::$line

[m] __construct

public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
Parameter
type name summary
​string $message = ""
​int $code = 0
​?Throwable $previous = null
Prototype
kind source summary
​inherit Exception::__construct()

[m] __wakeup

public function __wakeup()
Prototype
kind source summary
​inherit Exception::__wakeup()

[m] getMessage

final public function getMessage(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getMessage()

[m] getCode

final public function getCode()
Prototype
kind source summary
​inherit Exception::getCode()

[m] getFile

final public function getFile(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getFile()

[m] getLine

final public function getLine(): int
Return
type summary
​int
Prototype
kind source summary
​inherit Exception::getLine()

[m] getTrace

final public function getTrace(): array
Return
type summary
​array
Prototype
kind source summary
​inherit Exception::getTrace()

[m] getPrevious

final public function getPrevious(): ?\Throwable
Return
type summary
​?Throwable
Prototype
kind source summary
​inherit Exception::getPrevious()

[m] getTraceAsString

final public function getTraceAsString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getTraceAsString()

[m] __toString

public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::__toString()

[C] InvalidCountException 行数系例外の親例外

行数系例外の親例外

Hierarchy

Parents
type summary
RuntimeException
Exception
Implements
type summary
Stringable
Throwable

[p] $message

protected string $message = ""

Type: string

Prototype
kind source summary
​inherit Exception::$message

[p] $code

protected int $code = 0

Type: int

Prototype
kind source summary
​inherit Exception::$code

[p] $file

protected string $file = ""

Type: string

Prototype
kind source summary
​inherit Exception::$file

[p] $line

protected int $line = 0

Type: int

Prototype
kind source summary
​inherit Exception::$line

[m] __construct

public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
Parameter
type name summary
​string $message = ""
​int $code = 0
​?Throwable $previous = null
Prototype
kind source summary
​inherit Exception::__construct()

[m] __wakeup

public function __wakeup()
Prototype
kind source summary
​inherit Exception::__wakeup()

[m] getMessage

final public function getMessage(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getMessage()

[m] getCode

final public function getCode()
Prototype
kind source summary
​inherit Exception::getCode()

[m] getFile

final public function getFile(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getFile()

[m] getLine

final public function getLine(): int
Return
type summary
​int
Prototype
kind source summary
​inherit Exception::getLine()

[m] getTrace

final public function getTrace(): array
Return
type summary
​array
Prototype
kind source summary
​inherit Exception::getTrace()

[m] getPrevious

final public function getPrevious(): ?\Throwable
Return
type summary
​?Throwable
Prototype
kind source summary
​inherit Exception::getPrevious()

[m] getTraceAsString

final public function getTraceAsString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getTraceAsString()

[m] __toString

public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::__toString()

[C] NonSelectedException SELECT 操作で取得行が無かった時の例外クラス

SELECT 操作で取得行が無かった時の例外クラス

Hierarchy

Parents
type summary
InvalidCountException 行数系例外の親例外
RuntimeException
Exception
Implements
type summary
Throwable
Stringable

[p] $message

protected string $message = ""

Type: string

Prototype
kind source summary
​inherit Exception::$message

[p] $code

protected int $code = 0

Type: int

Prototype
kind source summary
​inherit Exception::$code

[p] $file

protected string $file = ""

Type: string

Prototype
kind source summary
​inherit Exception::$file

[p] $line

protected int $line = 0

Type: int

Prototype
kind source summary
​inherit Exception::$line

[m] __construct

public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
Parameter
type name summary
​string $message = ""
​int $code = 0
​?Throwable $previous = null
Prototype
kind source summary
​inherit Exception::__construct()

[m] __wakeup

public function __wakeup()
Prototype
kind source summary
​inherit Exception::__wakeup()

[m] getMessage

final public function getMessage(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getMessage()

[m] getCode

final public function getCode()
Prototype
kind source summary
​inherit Exception::getCode()

[m] getFile

final public function getFile(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getFile()

[m] getLine

final public function getLine(): int
Return
type summary
​int
Prototype
kind source summary
​inherit Exception::getLine()

[m] getTrace

final public function getTrace(): array
Return
type summary
​array
Prototype
kind source summary
​inherit Exception::getTrace()

[m] getPrevious

final public function getPrevious(): ?\Throwable
Return
type summary
​?Throwable
Prototype
kind source summary
​inherit Exception::getPrevious()

[m] getTraceAsString

final public function getTraceAsString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getTraceAsString()

[m] __toString

public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::__toString()

[C] TooManyException SELECT 操作で取得行が多かった時の例外クラス

SELECT 操作で取得行が多かった時の例外クラス

Hierarchy

Parents
type summary
InvalidCountException 行数系例外の親例外
RuntimeException
Exception
Implements
type summary
Throwable
Stringable

[p] $message

protected string $message = ""

Type: string

Prototype
kind source summary
​inherit Exception::$message

[p] $code

protected int $code = 0

Type: int

Prototype
kind source summary
​inherit Exception::$code

[p] $file

protected string $file = ""

Type: string

Prototype
kind source summary
​inherit Exception::$file

[p] $line

protected int $line = 0

Type: int

Prototype
kind source summary
​inherit Exception::$line

[m] __construct

public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
Parameter
type name summary
​string $message = ""
​int $code = 0
​?Throwable $previous = null
Prototype
kind source summary
​inherit Exception::__construct()

[m] __wakeup

public function __wakeup()
Prototype
kind source summary
​inherit Exception::__wakeup()

[m] getMessage

final public function getMessage(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getMessage()

[m] getCode

final public function getCode()
Prototype
kind source summary
​inherit Exception::getCode()

[m] getFile

final public function getFile(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getFile()

[m] getLine

final public function getLine(): int
Return
type summary
​int
Prototype
kind source summary
​inherit Exception::getLine()

[m] getTrace

final public function getTrace(): array
Return
type summary
​array
Prototype
kind source summary
​inherit Exception::getTrace()

[m] getPrevious

final public function getPrevious(): ?\Throwable
Return
type summary
​?Throwable
Prototype
kind source summary
​inherit Exception::getPrevious()

[m] getTraceAsString

final public function getTraceAsString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::getTraceAsString()

[m] __toString

public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Exception::__toString()

[N] ryunosuke\dbml\Gateway\

[C] TableGateway ゲートウェイクラス

ゲートウェイクラス

Database の各種メソッドで「$table に自身に指定した」かのように動作する。 Database や SelectBuilder に実装されているメソッドは大抵利用できるが、コード補完に出ないメソッドはなるべく使用しないほうがよい。

// ゲートウェイはこのように Database 経由で取得する $gw = $db->table_name; // プロパティ版(素の状態で取得) $gw = $db->table_name(); // メソッド版(引数で各句を指定可能) // 全行全列を返す $gw->array('*'); // id列の配列を返す $gw->lists('id'); // 複合主キー(1, 2)で検索した1行を返す $gw->find(1, 2); // レコードが存在するか bool で返す $gw->exists(); $gw->('*', ['status' => 'deleted']); // id 列の最小値を返す $gw->min('id'); // 自身と子供テーブルを階層化して返す $gw->array([ 'childassoc' => $db->child(), ]); // 自身と子供テーブルを JOIN して返す $gw->array([ // INNER JOIN '+children1' => $db->child(), // LEFT JOIN '<children2' => $db->child(), ]); // 自身と子供テーブルの集計を返す $gw->array([ 'subcount' => $db->child->subcount(), 'submin' => $db->child->submin('child_id'), 'submax' => $db->child->submax('child_id'), 'subsum' => $db->child->subsum('child_id'), 'subavg' => $db->child->subavg('child_id'), ]); // 行を挿入する $gw->insert(['data array']); // 行を更新する $gw->update(['data array'], ['where array']); // 行を削除する $gw->delete(['where array']); // カラム値をインクリメント $gw[1]['hoge_count'] += 1; // こういう指定もできるがこれは SELECT + UPDATE なので注意 $gw[1]['hoge_count'] = $db->raw('hoge_count + 1'); // 単純かつアトミックにやるならこうしなければならない

クエリスコープ

SELECT 句や WHERE 句のセットに名前をつけて、簡単に呼ぶことができる。

基本的には addScope で登録して scope で縛る。 addScope の引数はクエリビルダ引数と全く同じだが、第1引数のみ Closure を受け付ける。 Closure を受けたスコープはクエリビルダ引数を返す必要があるが、引数を受けられるのでパラメータ付きスコープを定義することができる。 また、 Closure 内の $this は「その時点の Gateway インスタンス」を指すように bind される。これにより $this->alias などが使用でき、当たっているスコープやエイリアス名などが取得できる。 さらに $this に下記の column where orderBy などを適用して return すればクエリビルダ引数を返さなくてもメソッドベースで適用できる。 scopeXXX で始まるメソッドを定義すると上記のクロージャで定義したような動作となる。

scoping を使用するとスコープを登録せずにその場限りのスコープを当てることができる。 また column where orderBy などの個別メソッドがあり、句別にスコープを当てることもできる。

// デフォルトスコープを登録(select 時に常に `NOW()` が付いてくるようになる) $gw->addScope('', 'NOW()'); // 有効レコードスコープを登録(select 時に `WHERE delete_flg=0` が付くようになる) $gw->addScope('active', [], ['delete_flg' => 0]); // 最新レコードスコープを登録(select 時に `ORDER BY create_date DESC LIMIT 10` が付くようになる) $gw->addScope('latest', function ($limit = 10) { return [ 'orderBy' => 'create_date DESC', 'limit' => $limit, ]; }); // 上記の this 返し版(意味は同じ) $gw->addScope('latest', function ($limit = 10) { return $this->orderBy('create_date DESC')->limit($limit); }); // 上記のメソッド版(意味は同じ。$this を返す必要はない) public function scopeLatest($limit = 10) { $this->orderBy('create_date DESC')->limit($limit); } // 有効レコードを全取得する('active' スコープで縛る) $gw->scope('active')->array(); // → SELECT NOW(), t_table.* FROM t_table WHERE t_table.delete_flg = 0 // NOW() が付いているのはデフォルトスコープが有効だから // デフォルトスコープを無効化して active, latest で縛る $gw->noscope()->scope('active')->scope('latest')->array(); // → SELECT t_table.* FROM t_table WHERE t_table.delete_flg = 0 ORDER BY t_table.create_date DESC LIMIT 10 // これでも同じ。複数のスコープはスペース区切りで同時指定できる $gw->noscope()->scope('active latest')->array(); // Closure なスコープはパラメータを指定できる $gw->scope('latest', 9)->array(); // → SELECT NOW(), t_table.* FROM t_table ORDER BY t_table.create_date DESC LIMIT 9 // スコープを登録せず、その場限りのものとして縛る $gw->scoping('id', ['invalid_flg' => 1], 'id DESC')->array(); // → SELECT id FROM t_table WHERE t_table.invalid_flg = 1 ORDER BY id DESC // それぞれの句の個別メソッドもある $gw->column('id')->where(['invalid_flg' => 1])->array(); // → SELECT id FROM t_table WHERE t_table.invalid_flg = 1 // スコープは insert/update/delete にも適用できる $gw->scope('active')->update(['column' => 'data']); // → UPDATE t_table SET column = 'data' WHERE t_table.delete_flg = 0

insert/update/delete に当たるスコープの仕様はかなり上級者向けなので、基本的には「where が当たる」という認識でよい。 そもそも insert/update/delete に対してスコープを当てる機会自体が稀だと思うので、基本的には気にしなくてもよい。 (スコープを当てない insert/update/delete は通常通りの動作)。

insert/update/delete にスコープを当てるときはデフォルトスコープに注意。 ありがちなのは上記の例で言うと delete_flg = 0 をデフォルトスコープにしているときで、このとき $gw->update(['delete_flg' => 1], ['primary_id' => 99]) として無効化しようとしても無効化されない。 デフォルトスコープの delete_flg = 0 が当たってヒットしなくなるからである。 基本的に insert/update/delete にスコープを当てるときは noscopeunscope でデフォルトスコープを外したほうが無難。 あるいは ignoreAffectScope でデフォルトスコープを外しておく。

スコープが当たっているクエリビルダは select メソッドで取得できる。 ただ1点注意として、スコープを当ててもオリジナルのインスタンスは変更されない。変更が適用された別のインスタンスを返す。 下記のコードが分かりやすい。

// これは誤り $gw->scope('active'); $gw->array(); // → `SELECT * FROM table_name` となり、スコープが当たっていない // これが正しい $gw = $gw->scope('active'); $gw->array(); // → `SELECT * FROM table_name WHERE table_name.delete_flg = 0` となり、スコープが当たっている // あるいはメソッドチェーンでも良い(良い、というかそれを想定している) $gw->scope('active')->array();

仮想カラム

(virtual|get|set)VirtualNameColumn というメソッドを定義すると仮想カラムとしてアクセスできるようになる(仮想カラムに関しては ryunosuke\dbml\Database::overrideColumns() を参照)。 参照時は get, 更新時は set が呼ばれる。 virtual の場合は get で引数なし、 set で引数ありでコールされる。 実処理はメソッド本体だが、属性を用いて implicit や type 属性を指定できる(ここでは記述できないのでテストを参照)。

// full_name という仮想カラムを定義(取得) public function getFullNameColumn() { return 'CONCAT(first_name, " ", family_name)'; } // full_name という仮想カラムを定義(設定) public function setFullNameColumn($value, $row) { return array_combine(['first_name', 'family_name'], explode(':', $value, 2)); } // full_name という仮想カラムを定義(上記2つを定義するのとほぼ同義) public function virtualFullNameColumn($value=null, $row=null) { if (func_num_args()) { return array_combine(['first_name', 'family_name'], explode(':', $value, 2)); } else { return 'CONCAT(first_name, " ", family_name)'; } }

Traversable, Countable

Traversable と Countable を実装しているので、 foreach で回すことができるし count() で件数取得もできる。

// active スコープを foreach で回す foreach ($gw->scope('active') as $item) { var_dump($item); } // active スコープの件数を取得 $gw->count();

foreach で回すときのメソッドはデフォルトで array。 これは $defaultIteration で変更できる。 $defaultIteration は複数設定できる箇所があるが、下記の優先順位となる。

  • Database の defaultIteration オプション
  • クラスの $defaultIteration プロパティ
  • 明示的に設定した $defaultIteration プロパティ

下に行くほど優先される。要するに単純に個別で指定するほど強い。

count() は count($gw)$gw->count('*') で挙動が異なる(ryunosuke\dbml\Gateway\TableGateway::count() を参照)

JOIN

メソッドコール or マジックゲット or マジックコールを使用して JOIN を行うことができる。 それぞれできる範囲と記法が異なり、特色がある(メソッドコールは冗長、マジックゲットは end がウザイ、マジックコールはエイリアスが張れない など)。

# メソッドコール(すべての基本。これがベースであり多少冗長になるが出来ないことはない) $db->t_article->join('inner', $db->t_comment, [$oncond])->array(); # マジックゲット(テーブル名でアクセスすると「自身に対象を JOIN して対象を返す」という動作になる) // end() が必要 $db->t_article->t_comment->end()->array(); // end() がないと SELECT * FROM t_comment になる。なぜなら「t_article に t_comment を JOIN して t_comment を返す」という動作なので、t_comment は何も作用していない。つまり t_comment に対して array() しているだけである $db->t_article->t_comment->array(); // このように「JOIN 対象に何らかの操作を行いたい」場合はマジックゲットが便利 $db->t_article->t_comment->as('C')->scope('active')->orderBy('id')->end()->array(); # マジックコール(テーブル名でコールすると「自身に対象を JOIN して自身を返す」という動作になる) // 「自身を返す」ので end() は不要 $db->t_article->t_comment()->array(); // 「自身を返す」ので t_user は t_article に JOIN される $db->t_article->t_comment()->t_user()->array(); // 引数には scoping 引数が使える $db->t_article->t_comment('id, comment', ['id' => 3])->array(); # マジックゲット+オフセットアクセス+invoke を使用した高度な例 $db->t_article->t_comment['@active AS C']()->array();

厳密にやりたいならメソッドコール、ある程度条件を付与したいならマジックゲット、とにかく単に JOIN して引っ張りたいだけならマジックコールが適している。

マジック系 JOIN の 外部結合・内部結合は $defaultJoinMethod で決定する(メソッドコールは専用のメソッドが生えている)。 $defaultJoinMethod に INNER, LEFT などの文字列を設定するとそれで結合される。 ただし、特殊な結合モードとして "AUTO" がある。 AUTO JOIN は「外部キーカラム定義」に基づいて自動で INNER or LEFT を決定する。 極めて乱暴に言えば「他方が見つからない可能性がある場合」に LEFT になる(カラム定義や親子関係を見て決める)。 基本的にはこの動作で問題なく、明示指定より AUTO の方が優れているが、他の結合条件によっては「共に NOT NULL だけど結合したら他方が NULL」になる状況はありうるため、完全に頼り切ってはならない。

JOIN の時、スコープがあたっている場合は下記の動作になる。

clause 説明
column JOIN 時の取得カラムとして使用される
where ON 句として使用される
orderBy 駆動表の ORDER 句に追加される
limit, groupBy, having これらが一つでも指定されている場合はそれらを適用したサブクエリと JOIN される。この際、上記の where -> ON の適用は行われない(サブクエリに内包される)

「where が ON 句として使用される」はとても重要な性質で、これを利用することで外部キー結合しつつ、追加条件を指定することが出来るようになる。 「駆動表の ORDER 句に追加」もそれなりに重要で、 RDBMS における JOIN は本質的には順序を持たないが、駆動表に追加することで擬似的に順序付きを実現できる。

limit, having などがサブクエリ化されるのはこれらが指定されているときのテーブルとしての JOIN は本質的に不可能だからである。 場合によっては非常に非効率なクエリになるので注意。 また、その性質上、外部キー結合をすることはできない。

マジックカラム

__get にカラム名を渡すとマジックカラム状態の自身を返す。 マジックカラムは状況に応じて(現在のところ) column/where に適宜使用される。 マジックカラムは一過性であり、適用された後は null になる。

// title をマジックカラムにして title を SELECT $title = $gw->title->value(); // => $gw->value('title') と同じ // id をマジックカラムにして id で WHERE $gw->id[1]->tuple(); // => $gw->where(['id' => 1])->tuple() と同じ
Implements
type summary
ArrayAccess
IteratorAggregate
Countable
Stringable
Traversable
Uses
type summary
DebugInfoTrait
OptionTrait オプションを保持し、get/set できるようにする trait
IteratorTrait イテレータ(主に結果セット)を利用しやすくするための trait
JoinTrait
SelectMethodTrait
SelectOrThrowTrait
SelectInShareTrait
SelectForUpdateTrait
SelectForAffectTrait
FindTrait
YieldTrait
ExportTrait
SelectAggregateTrait
AggregateTrait
SubSelectTrait
SubAggregateTrait
AffectOrThrowTrait
AffectAndPrimaryTrait
AffectAndBeforeTrait

[p] $defaultIteration

protected string $defaultIteration = ""

Type: string

[p] $defaultJoinMethod

protected string $defaultJoinMethod = ""

Type: string

[m] getDatabase

protected function getDatabase(): ryunosuke\dbml\Database
Return
type summary
Database

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override OptionTrait::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, string $table_name, ?string $entity_name = null )
Parameter
type name summary
Database $database
​string $table_name
​?string $entity_name = null

[m] __get column 指定か自身と指定先テーブルを JOIN する

column 指定か自身と指定先テーブルを JOIN する
public function __get(string $name): ?ryunosuke\dbml\Gateway\TableGateway

$name がカラム名ならマジックカラム設定される。

$name がテーブル名なら返り値として「JOIN したテーブルの Gateway」を返す。 JOIN 先に対してなにかしたい場合は ryunosuke\dbml\Gateway\TableGateway::end() が必要。冒頭の「メソッドコール or マジックゲット or マジックコール」も参照。

Parameter
type name summary
​string $name
Return
type summary
​?TableGateway

[m] __set update([$name => $value]) のエイリアス

update([$name => $value]) のエイリアス
public function __set( string $name, mixed $value )
Parameter
type name summary
​string $name
​mixed $value

[m] __invoke scoping + end する

scoping + end する
public function __invoke( string|array|\Closure $tableDescriptor = [], string|array $where = [], string|array $orderBy = [], string|array $limit = [], string|array $groupBy = [], string|array $having = [] ): ryunosuke\dbml\Gateway\TableGateway|array|ryunosuke\dbml\Entity\Entityable|mixed

引数で scoping(...func_get_args()) したあと end(1) することで JOIN先 Geteway を返す。

冒頭に記載の通り、 マジックコールは「自身に対象を JOIN して自身」を返す。 引数は各句を表すので、エイリアス(AS A)やスコープを適用することが出来ない

つまり、ただ呼び出すだけで無意味なように思えるが、これがあることで $db->t_table['@scope AS T']('column', 'where') のような記法が可能になっている。

サンプルは ryunosuke\dbml\Gateway\TableGateway::offsetGet() を参照。

Parameter
type name summary
​string|​array|​Closure $tableDescriptor = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $orderBy = [] ORDER BY 句
​string|​array $limit = [] LIMIT 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
Return
type summary
TableGateway|​array|​Entityable|​mixed レコード・カラム値・JOIN先 Geteway

[m] __toString 完全なクエリ文字列を返す

完全なクエリ文字列を返す
public function __toString(): string

エスケープ済みで実行可能なクエリを返す。

// SELECT * FROM t_table WHERE t_table.primary_id = '1' echo $gw->pk(1); // SELECT T.id, T.title FROM t_table T WHERE T.create_at = '2014-03-31' LIMIT 1 echo $gw->as('T')->column(['id', 'title'])->where(['create_at' => '2014-03-31'])->limit(1);
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[m] offsetExists なにがしかの存在を返す

なにがしかの存在を返す
public function offsetExists(mixed $offset): bool

$offset が数値・配列なら主キーとみなして行の存在を返す。 $offset がそれ以外ならカラムの存在を返す。

# 行の存在を確認する $exists1 = isset($gw[1]); // 単一主キー値1のレコードがあるなら true $exists2 = isset($gw[[1, 2]]); // 複合主キー値[1, 2]のレコードがあるなら true # カラムの存在を確認する $exists1 = isset($gw['article_title']); // true $exists2 = isset($gw['undefined_column']); // false
Parameter
type name summary
​mixed $offset
Return
type summary
​bool
Prototype
kind source summary
​implement ArrayAccess::offsetExists()

[m] offsetGet なにがしかの値を取得する

なにがしかの値を取得する
public function offsetGet(mixed $offset): mixed|ryunosuke\dbml\Gateway\TableGateway

$offset が数値・配列なら主キーとみなして where する(≒pk)。 $offset が '' なら指定とみなしてレコードを返す(≒tuple)。 $offset が半角英数字ならカラムとみなしてカラム値を返す(≒value)。 $offset がテーブル記法ならその記法が適用された自分自身を返す。 テーブル記法のうち、 [condition] だけであれば [] が省略可能となる。

# 数値・配列なら pk (where) と同義 $row = $gw[1]->tuple(); // 単一主キー値1のレコードを返す $row = $gw[[1, 2]]->tuple(); // 複合主キー値[1, 2]のレコードを返す $row = $gw->find($pk); // 上2つは実質的にこれの糖衣構文 # レコードを返す $row = $gw['*']; // ただし、WHERE を指定しないとエラーになるので通常はこのように使用する $row = $gw->[1]['*']; // 主キー=1 の全カラムを返す(SELECT * FROM t_table WHERE id = 1) $row = $gw->[1]['**']; // 怠惰取得も可能(怠惰取得については SelectBuilder::column() を参照) # カラム値を返す $title = $gw['article_title']; // ただし、WHERE を指定しないとほぼ意味がないので通常はこのように使用する $title = $gw->pk(1)['article_title']; $title = $gw->scope('scopename')['article_title']; # スコープとエイリアスが適用された自分自身を返す $gw = $gw['@scope1@scope2 AS GW']; $gw = $gw->scope('scope1')->scope('scope2')->as('GW'); // 上記は実質的にこれと同じ # エイリアスやカラムも指定できるのでこういった面白い指定も可能 $gw['G.id']->array(); // SELECT G.id FROM t_table G # [condition] だけであれば [] は不要。下記はすべて同じ意味になる $gw = $gw['[id: 123]']; // 本来であればこのように指定すべきだが・・・ $gw = $gw['id: 123']; // [] は省略可能([] がネストしないのでシンタックス的に美しくなる) $gw = $gw['id=123']; // 素の文字列が許容されるならこのようにすると属性アクセスしてるように見えてさらに美しい $gw = $gw->where(['id' => 123]); // あえてメソッドモードで指定するとしたらこのようになる # invoke と組み合わせると下記のようなことが可能になる $db->t_article->t_comment['@scope1@scope2 AS C']($column, $where);
Parameter
type name summary
​mixed $offset
Return
type summary
​mixed|​TableGateway
Prototype
kind source summary
​implement ArrayAccess::offsetGet()

[m] offsetSet なにがしかの値を設定する

なにがしかの値を設定する
public function offsetSet( mixed $offset, mixed $value )

$offset が null なら ryunosuke\dbml\Gateway\TableGateway::insert() になる。 $offset が数値・配列なら ryunosuke\dbml\Gateway\TableGateway::modify() になる。 $offset が半角英数字ならカラムの ryunosuke\dbml\Gateway\TableGateway::update() になる。

# 1行 insert $gw[] = [$dataarray]; // $dataarray が insert される # 1行 modify $gw[1] = [$dataarray]; // $gw->modify([$dataarray] + [pcol => 1]) $gw[[1, 2]] = [$dataarray]; // $gw->modify([$dataarray] + [pcol1 => 1, pcol2 => 2]) # 記事のタイトルを設定する $gw['article_title'] = 'タイトル'; // ただし、WHERE を指定しないと全行更新され大事故になるので通常は下記のように何らかで縛って使用する $gw->scope('scopename')['article_title'] = 'タイトル'; $gw['id: 1']['article_title'] = 'タイトル'; $gw->pk(1)['article_title'] = 'タイトル'; $gw[1]['article_title'] = 'タイトル';
Parameter
type name summary
​mixed $offset
​mixed $value
Prototype
kind source summary
​implement ArrayAccess::offsetSet()

[m] offsetUnset なにがしかの値を削除する

なにがしかの値を削除する
public function offsetUnset(mixed $offset)

$offset が数値・配列なら主キー指定の ryunosuke\dbml\Gateway\TableGateway::delete() になる。 それ以外は例外を投げる。

# 主キーで削除 unset($gw[1]); // 単一主キー値1のレコードを削除する unset($gw[[1, 2]]); // 複合主キー値[1, 2]のレコードを削除する
Parameter
type name summary
​mixed $offset
Prototype
kind source summary
​implement ArrayAccess::offsetUnset()

[m] clone コピーインスタンスを返す

コピーインスタンスを返す
public function clone(bool|\Closure $force = false): ryunosuke\dbml\Gateway\TableGateway

「コピーインスタンス」とは「オリジナルではないインスタンス」のこと。 immutable:false の時はオリジナルでなければコピーなので複数回呼んでも初回以外は同じインスタンスを返す。 それを避けるには $force に true を渡す必要がある。

$force にクロージャを渡すと clone 後に $this bind で call される。 コールバック中は immutable が false となり、コールバック中の操作はダイレクトに変更される。 これは利便性とパフォーマンスのためで、例えば immutable:true の時、下記のコードは clone が多発してパフォーマンスが悪くなる。

$gw->column(['column_name'])->where(['condition'])->orderBy(['+column_name']);

コールバックを渡すと1回しか clone されないため無駄がなくなる。

$gw->clone(function () { $this->column(['column_name']); $this->where(['condition']); $this->orderBy(['+column_name']); });
Parameter
type name summary
​bool|​Closure $force = false 強制フラグ or コールバック
Return
type summary
TableGateway

[m] describe 自身の Table オブジェクトを返す

自身の Table オブジェクトを返す
public function describe(): Doctrine\DBAL\Schema\Table
Return
type summary
Table

[m] normalize 行を正規化する

行を正規化する
public function normalize(array $row): array
Parameter
type name summary
​array $row
Return
type summary
​array

[m] invalidColumn 無効カラムを返す

無効カラムを返す
public function invalidColumn(): ?array
Return
type summary
​?array

[m] as テーブルエイリアス名を設定する

テーブルエイリアス名を設定する
public function as(?string $alias): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename AS hoge_alias echo $gw->as('hoge_alias');
Parameter
type name summary
​?string $alias
Return
type summary
TableGateway

[m] end join の起点オブジェクトを返す

join の起点オブジェクトを返す
public function end(int $back = 0): ryunosuke\dbml\Gateway\TableGateway

jQuery の end() を想像すると分かりやすいかもしれない。

なお、引数で戻る回数を指定できる。省略した場合は全て戻る。

# この $select は t_child のビルダを指す(__get はそれ自身を返すから) $select = $db->t_parent->t_child->select(); # この $select は t_parent のビルダを指す(end() することで join 先を辿るから) $select = $db->t_parent->t_child->end()->select(); # この $select は t_child のビルダを指す(1回を指定してるから) $select = $db->t_parent->t_child->t_grand->end(1)->select();
Parameter
type name summary
​int $back = 0
Return
type summary
TableGateway

[m] tableName 実テーブル名を返す

実テーブル名を返す
public function tableName(): string
Return
type summary
​string

[m] alias select の際に使用されるエイリアス名を設定・取得する

select の際に使用されるエイリアス名を設定・取得する
public function alias(?string $alias = null): ryunosuke\dbml\Gateway\TableGateway|string|null

引数を与えると setter, 与えないと getter として動作する。 setter の場合は自分自身を返す。

Parameter
type name summary
​?string $alias = null
Return
type summary
TableGateway|​string|​null

[m] foreign select の際に使用される外部キーを設定・取得する

select の際に使用される外部キーを設定・取得する
public function foreign(?string|string|null $foreign = null): ryunosuke\dbml\Gateway\TableGateway|string|null

引数を与えると setter, 与えないと getter として動作する。 setter の場合は自分自身を返す。

Parameter
type name summary
​?string|​string|​null $foreign = null 外部キー名
Return
type summary
TableGateway|​string|​null 外部キー名 or 自分自身

[m] hint インデックスヒントを設定・取得する

インデックスヒントを設定・取得する
public function hint(?string $hint = null): ryunosuke\dbml\Gateway\TableGateway|string|null

引数を与えると setter, 与えないと getter として動作する。 setter の場合は自分自身を返す。

Parameter
type name summary
​?string $hint = null
Return
type summary
TableGateway|​string|​null

[m] modifier エイリアス指定されているならそれを、されていないならテーブル名を返す

エイリアス指定されているならそれを、されていないならテーブル名を返す
public function modifier(): string
// t_tablename echo $gw->modifier(); // T echo $gw->as('T')->modifier();
Return
type summary
​string

[m] join 結合タイプや結合条件、外部キーを指定して JOIN する

結合タイプや結合条件、外部キーを指定して JOIN する
public function join( string $type, ryunosuke\dbml\Gateway\TableGateway $gateway, string|array $on = [], ?string $fkeyname = null ): ryunosuke\dbml\Gateway\TableGateway

実際は下記のようなエイリアスメソッドが定義されているのでそちらを使うことが多く、明示的に呼ぶことはほとんどない。 さらにクラス冒頭に記載の通りマジックゲットやマジックコールの方が平易なシンタックスになるため、ますます出番は少ない。

# joinOn は innerJoinOn のエイリアス $db->t_from->joinOn($db->t_join, ['hoge = fuga']); // SELECT t_from.* FROM t_from INNER JOIN t_join ON hoge = fuga # leftJoinOn を使うと LEFT を明示できる $db->t_from->leftJoinOn($db->t_join, ['hoge = fuga']); // SELECT t_from.* FROM t_from LEFT JOIN t_join ON hoge = fuga # joinForeign は autoJoinForeign のようなもの(外部キー定義によって INNER か AUTO かが自動で決まる) $db->t_from->joinForeign($db->t_join); // SELECT t_from.* FROM t_from INNER JOIN t_join ON t_from.foreign_col = t_join.foreign_col # leftJoinForeign を使うと LEFT を明示できる $db->t_from->leftJoinForeign($db->t_join); // SELECT t_from.* FROM t_from LEFT JOIN t_join ON t_from.foreign_col = t_join.foreign_col # joinForeignOn は autoJoinForeignOn のようなもの(外部キー定義によって INNER か AUTO かが自動で決まる) $db->t_from->joinForeignOn($db->t_join, ['hoge = fuga']); // SELECT t_from.* FROM t_from INNER JOIN t_join ON (t_from.foreign_col = t_join.foreign_col) AND (hoge = fuga) # leftJoinForeignOn を使うと LEFT を明示できる $db->t_from->leftJoinForeignOn($db->t_join, ['hoge = fuga']); // SELECT t_from.* FROM t_from LEFT JOIN t_join ON (t_from.foreign_col = t_join.foreign_col) AND (hoge = fuga)
Parameter
type name summary
​string $type 結合タイプ(AUTO, INNER, ...)
TableGateway $gateway 結合するテーブルゲートウェイ
​string|​array $on = [] 結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える
​?string $fkeyname = null 外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外)
Return
type summary
TableGateway

[m] joinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::joinOn() 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] innerJoinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinOn() 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinOn 結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinOn() 結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinOn 結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinOn() 結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] joinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::joinForeign() 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] autoJoinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::autoJoinForeign() 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] innerJoinForeign 結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinForeign() 結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinForeign 結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinForeign() 結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinForeign 結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinForeign() 結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] joinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeignOn( $table, string|array $on = [], ?string $fkeyname = null, $from = null ): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
$table
​string|​array $on = [] 結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える
​?string $fkeyname = null 外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外)
$from = null
Return
type summary
TableGateway
Prototype
kind source summary
​instead JoinTrait::joinForeignOn() 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] autoJoinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::autoJoinForeignOn() 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] innerJoinForeignOn 結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinForeignOn() 結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinForeignOn 結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinForeignOn() 結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinForeignOn 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinForeignOn() 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] dryrun dryrun モードに移行する

dryrun モードに移行する
public function dryrun(): ryunosuke\dbml\Gateway\TableGateway
Return
type summary
TableGateway

[m] prepare prepare モードに移行する

prepare モードに移行する
public function prepare(): ryunosuke\dbml\Gateway\TableGateway
Return
type summary
TableGateway

[m] cache cache モードに移行する

cache モードに移行する
public function cache(int $seconds): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​int $seconds
Return
type summary
TableGateway

[m] prepareSelect 取得系クエリをプリペアする

取得系クエリをプリペアする
public function prepareSelect( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] ): ryunosuke\dbml\Query\Statement
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Return
type summary
Statement

[m] addScope スコープを定義する

スコープを定義する
public function addScope( string $name = "", string|array|\Closure $tableDescriptor = [], string|array $where = [], string|array $orderBy = [], string|array $limit = [], string|array $groupBy = [], string|array $having = [], $sets = [] ): ryunosuke\dbml\Gateway\TableGateway

空文字のスコープはデフォルトスコープとなり、デフォルトで適用されるようになる。

スコープはオリジナルに対しても反映される(インスタンス間で共用される)。

$gw = $db->t_article->as('A'); $gw->addScope('scopename', []); // $db->t_article と $gw は(as してるので)別インスタンスだが、 $gw で定義したスコープはオリジナルでも使用することができる $gw2 = $db->t_article->scope('scopename');
Parameter
type name summary
​string $name = "" スコープ名
​string|​array|​Closure $tableDescriptor = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $orderBy = [] ORDER BY 句
​string|​array $limit = [] LIMIT 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
$sets = []
Return
type summary
TableGateway

[m] mixScope スコープを合成する(スコープを利用してスコープを定義する)

スコープを合成する(スコープを利用してスコープを定義する)
public function mixScope( string $name, string|array $sourceScopes, array|\Closure ...$newscopes ): ryunosuke\dbml\Gateway\TableGateway

合成スコープの引数は「元スコープの引数が足りない場合に補うように」動作する。 しかしそもそも優先順位がややこしいので使用は推奨しない。 動的を動的のまま合成したいことはあまりないと思うので、合成時に引数を完全に指定するのがもっとも無難。

# 既にスコープ a, b, c が登録されているとする // このようにスコープ当てるように合成できる $gw->mixScope('mixedABC', 'a b c'); // 既存スコープが動的スコープなら引数を与えることができる $gw->mixScope('mixedABC', [ 'a' => [1 ,2 ,3], // スコープ a の引数 'b' => [4, 5, 6], // スコープ a の引数 'c' => [7, 8 ,9], // スコープ a の引数 ]); // いずれにせよ合成したスコープは普通のスコープと同じように使用できる $gw->scope('mixedABC')->array(); // 実質的にこのように使用時に全部当てることと同義だが、頻出するなら使用時に複数を当てるよりも定義したほうが保守性が高くなる $gw->scope('a b c')->array();
Parameter
type name summary
​string $name スコープ名
​string|​array $sourceScopes 既存スコープ名
​array|​Closure ...$newscopes 追加で設定するスコープ(scoping と同じ)
Return
type summary
TableGateway

[m] bindScope 引数付きスコープを特定の値で bind してデフォルト化する

引数付きスコープを特定の値で bind してデフォルト化する
public function bindScope( string $name, array $binding ): ryunosuke\dbml\Gateway\TableGateway

$args のインデックスは活きる(ゼロベース)。 つまり、 [1 => 'hoge', 3 => 'fuga'] という配列で bind すると第1引数と第3引数を与えたことになる。

複数呼ぶと蓄積される(例を参照)。 また、いかなる状況でも bind した値より当てる時に指定した値が優先される。

// 3つの引数を取るスコープがあるとして・・・ $gw->addScope('abc', function ($a, $b, $c) {}); // こうすると第3引数が不要になるので・・・ $gw->bindScope('abc', [2 => 'c']); // このように呼べるようになる(第3引数には 'c' が渡ってくる) $gw->scope('abc', 'a', 'b'); // 効果は蓄積されるので・・・ $gw->bindScope('abc', [1 => 'b']); // このように呼べる(第2引数には 'b', 第3引数には 'c' が渡ってくる) $gw->scope('abc', 'a'); // このように当てる時に指定した値が優先される(第2引数には 'y', 第3引数には 'z' が渡ってくる) $gw->scope('abc', 'a', 'y', 'z');
Parameter
type name summary
​string $name スコープ名
​array $binding bind する引数配列
Return
type summary
TableGateway

[m] scoping スコープの追加と縛りを同時に行う

スコープの追加と縛りを同時に行う
public function scoping( string|array|\Closure $tableDescriptor = [], string|array $where = [], string|array $orderBy = [], string|array $limit = [], string|array $groupBy = [], string|array $having = [] ): ryunosuke\dbml\Gateway\TableGateway

実際は ryunosuke\dbml\Gateway\TableGateway::column(), ryunosuke\dbml\Gateway\TableGateway::where() 等の句別メソッドを使うほうが多い。

// 下記は同じ(スコープ名は自動で決まる≒使い捨てスコープ) $gw->addScope('hoge', 'column', 'where', 'order', 99, 'group', 'having')->scope('hoge')->array(); $gw->scoping('column', 'where', 'order', 99, 'group', 'having')->array();
Parameter
type name summary
​string|​array|​Closure $tableDescriptor = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $orderBy = [] ORDER BY 句
​string|​array $limit = [] LIMIT 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
Return
type summary
TableGateway

[m] column SELECT 句を追加する(ryunosuke\dbml\Query\SelectBuilder::column()") を参照)

SELECT 句を追加する(ryunosuke\dbml\Query\SelectBuilder::column() を参照)
public function column($tableDescriptor): ryunosuke\dbml\Gateway\TableGateway
// SELECT id, name FROM tablename echo $gw->column('id, name');
Parameter
type name summary
$tableDescriptor
Return
type summary
TableGateway

[m] where WHERE 句を追加する(ryunosuke\dbml\Query\SelectBuilder::where()") を参照)

WHERE 句を追加する(ryunosuke\dbml\Query\SelectBuilder::where() を参照)
public function where($where): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename WHERE id = 99 echo $gw->where(['id' => 99]);
Parameter
type name summary
$where
Return
type summary
TableGateway

[m] orderBy ORDER BY 句を追加する(ryunosuke\dbml\Query\SelectBuilder::orderBy()") を参照)

ORDER BY 句を追加する(ryunosuke\dbml\Query\SelectBuilder::orderBy() を参照)
public function orderBy($orderBy): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename ORDER BY id ASC echo $gw->orderBy(['id']);
Parameter
type name summary
$orderBy
Return
type summary
TableGateway

[m] limit LIMIT 句を追加する(ryunosuke\dbml\Query\SelectBuilder::limit()") を参照)

LIMIT 句を追加する(ryunosuke\dbml\Query\SelectBuilder::limit() を参照)
public function limit($limit): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename LIMIT 50 OFFSET 40 echo $gw->limit([40 => 50]);
Parameter
type name summary
$limit
Return
type summary
TableGateway

[m] groupBy GROUP BY 句を追加する(ryunosuke\dbml\Query\SelectBuilder::groupBy()") を参照)

GROUP BY 句を追加する(ryunosuke\dbml\Query\SelectBuilder::groupBy() を参照)
public function groupBy(...$groupBy): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename GROUP BY group_key echo $gw->groupBy('group_key');
Parameter
type name summary
...$groupBy
Return
type summary
TableGateway

[m] having HAVING 句を追加する(ryunosuke\dbml\Query\SelectBuilder::having()") を参照)

HAVING 句を追加する(ryunosuke\dbml\Query\SelectBuilder::having() を参照)
public function having($having): ryunosuke\dbml\Gateway\TableGateway
// SELECT * FROM tablename HAVING id = 99 echo $gw->having(['id' => 99]);
Parameter
type name summary
$having
Return
type summary
TableGateway

[m] set SET 句を追加する

SET 句を追加する
public function set(array $sets): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​array $sets
Return
type summary
TableGateway

[m] scope スコープで縛る

スコープで縛る
public function scope( string|array $name = "", mixed $variadic_parameters = [] ): ryunosuke\dbml\Gateway\TableGateway

スコープは空白区切りで複数指定できる。 第2引数はクロージャによる動的スコープの引数となる。

# scope1 と scope 2 を当てる $gw->scope('scope1 scope2'); # 動的スコープにパラメータを与えて当てる $gw->scope('scopename', 5); # 配列指定で複数の動的スコープにパラメータを与えて当てる $gw->scope([ 'scope1' => 1, // 本来は引数を配列で与えるが、配列でない場合は配列化される([1]と同義) 'scope2' => ['a', 'b'], // 'a' が第1引数、'b' が第2引数の意味になる 'scope3', // パラメータなしスコープも同時指定できる ]);

パラメータ有りを含むスコープをスペース区切りで同時に当てた場合は全てのスコープに引数が渡る。 意図しない挙動になり得るのでその場合は配列指定で当てたほうが良い。

Parameter
type name summary
​string|​array $name = "" スコープ名
​mixed $variadic_parameters = [] スコープパラメータ
Return
type summary
TableGateway

[m] unscope 名前指定でスコープを外す

名前指定でスコープを外す
public function unscope($name = ""): ryunosuke\dbml\Gateway\TableGateway

スコープは空白区切りで複数指定できる。

# 特に意味はないが、スコープを当てて外すコード $gw->scope('scope1 scope2')->unscope('scope1 scope2');
Parameter
type name summary
$name = ""
Return
type summary
TableGateway

[m] noscope デフォルトスコープを含め、縛っているスコープをすべて解除する

デフォルトスコープを含め、縛っているスコープをすべて解除する
public function noscope(): ryunosuke\dbml\Gateway\TableGateway
Return
type summary
TableGateway

[m] definedScope スコープが定義されているかを返す

スコープが定義されているかを返す
public function definedScope(string|array $name): array|string|null

配列を与えると定義されているスコープだけの配列を返す。 文字列を与えると定義されている時にそのまま返す(未定義は null を返す)。

Parameter
type name summary
​string|​array $name スコープ名
Return
type summary
​array|​string|​null 自分自身

[m] getScopes 定義されているすべてのスコープを返す

定義されているすべてのスコープを返す
public function getScopes(): array
Return
type summary
​array

[m] getScopeParts スコープのクエリ引数を得る

スコープのクエリ引数を得る
public function getScopeParts( string $name = "", $variadic_parameters = [] ): array

スコープは基本的に固定的だが、クロージャを与えたときのみ動的になる。 $variadic_parameters を与えるとそれを引数として渡す(普通に scope した時の動作)。 ただし、自身に既に当たっている場合はそれが使用される(引数を与えると上書きされる)。

# 静的スコープ $gw->addScope('scope1', 'NOW()', 'cond'); $gw->getScopeParts('scope1'); // result: 単純にパーツ配列が得られる [ 'column' => 'NOW()', 'where' => 'cond', 'orderBy' => [], 'limit' => [], 'groupBy' => [], 'having' => [], ]; # 動的スコープ $gw->addScope('scope2', function ($id) { return [ 'column' => 'NOW()', 'where' => ['col' => $id], ]; }); $gw->getScopeParts('scope2', 123); // result: [ 'column' => 'NOW()', 'where' => ['col' => 123], 'orderBy' => [], 'limit' => [], 'groupBy' => [], 'having' => [], ];
Parameter
type name summary
​string $name = ""
$variadic_parameters = []
Return
type summary
​array

[m] getScopeParams 現スコープのクエリビルダ引数を取得する

現スコープのクエリビルダ引数を取得する
public function getScopeParams( string|array|\Closure $tableDescriptor = [], string|array $where = [], string|array $orderBy = [], string|array $limit = [], string|array $groupBy = [], string|array $having = [] ): array

引数は全て省略できる。省略した場合結果はスコープのもののみとなる。 指定した場合は追加でスコープを指定したように振舞う。

Parameter
type name summary
​string|​array|​Closure $tableDescriptor = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $orderBy = [] ORDER BY 句
​string|​array $limit = [] LIMIT 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
Return
type summary
​array

[m] getScopeParamsForAffect 更新用の ryunosuke\dbml\Gateway\TableGateway::getScopeParams()")

更新用の ryunosuke\dbml\Gateway\TableGateway::getScopeParams()
public function getScopeParamsForAffect( string|array|\Closure $tableDescriptor = [], string|array $where = [], string|array $orderBy = [], string|array $limit = [], string|array $groupBy = [], string|array $having = [] ): array
Parameter
type name summary
​string|​array|​Closure $tableDescriptor = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $orderBy = [] ORDER BY 句
​string|​array $limit = [] LIMIT 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
Return
type summary
​array

[m] pk 主キー値指定の where メソッド

主キー値指定の where メソッド
public function pk(mixed ...$variadic): ryunosuke\dbml\Gateway\TableGateway

主キーの値だけを与えて ryunosuke\dbml\Gateway\TableGateway::where() する。 可変引数で複数の主キー値を与えることができる。

単一主キーの場合でもそれなりに有用だし、複合主キーの場合は劇的に記述を減らすことができる。 さらに複合主キーの場合は主キー値が足りなくても良い。その場合、指定された分だけで where する。 ただし、多い場合は例外を投げる。

# 単一主キー値を1つ指定(下記は等価になる) $gw->pk(1); // 配列で指定 $gw->where(['pid' => 1]); // where で指定 // SELECT * FROM t_table WHERE (pid = 1) # 単一主キー値を可変引数で2つ指定(下記は等価になる) $gw->pk(1, 2); // 配列で指定 $gw->where(['pid' => [1, 2]]); // where で指定 // SELECT * FROM t_table WHERE (pid = 1 OR pid = 2) # 複合主キー値を1つ指定(下記は等価になる) $gw->pk([1, 1]); // 配列で指定 $gw->where(['mainid' => 1, 'subid' => 1]); // where で指定 // SELECT * FROM t_table WHERE (mainid = 1 AND subid = 1) # 複合主キー値を可変引数で2つ指定(下記は等価になる) $gw->pk([1, 1], [2, 2]); // 配列で指定 $gw->where([ // where で指定 [ ['mainid' => 1, 'subid' => 1], ['mainid' => 2, 'subid' => 2], ] ]); // SELECT * FROM t_table WHERE (mainid = 1 AND subid = 1) OR (mainid = 2 AND subid = 2) # 欠けた複合主キー値を可変引数で2つ指定(下記は等価になる) $gw->pk([1], [2, 2]); // 配列で指定 $gw->where([ // where で指定 [ ['mainid' => 1], ['mainid' => 2, 'subid' => 2], ] ]); // SELECT * FROM t_table WHERE (mainid = 1) OR (mainid = 2 AND subid = 2)
Parameter
type name summary
​mixed ...$variadic 主キー値
Return
type summary
TableGateway

[m] uk 一意キー値指定の where メソッド

一意キー値指定の where メソッド
public function uk(mixed ...$variadic): ryunosuke\dbml\Gateway\TableGateway

一意キーの値だけを与えて ryunosuke\dbml\Gateway\TableGateway::where() する。 可変引数で複数の一意キー値を与えることができる。

主キーは一意キーとはみなされない(主キーは pk があるので、このメソッドを使うメリットがない)。 使い方は pk とほぼ同じ。ただし、主キーと違い一意キーは複数個の存在が許容されるので使い方のルールがある。

一意キーが1つしか存在しない場合はシンプルにそのキーを使う。 一意キーが2つ以上存在する場合は型がすべて一致するものを使う。 いずれにせよ引数の数と一意キーのカラム数が一致しないものは使われない。

# 下記は等価 $gw->uk([1, 2]); // 配列で指定 $gw->where(['unique_id1' => 1, 'unique_id2' => 2]); // where で指定 // SELECT * FROM t_table WHERE (unique_id1 = 1) AND (unique_id2 = 2) # このような使い方を想定している $gw->uk('mail@address'); // 一意キーの値が 'mail@address' のレコード // SELECT * FROM t_user WHERE mailaddress = 'mail@address' # 複数指定も可 $gw->uk('mail1@address', 'mail2@address'); // SELECT * FROM t_user WHERE mailaddress = 'mail1@address' OR mailaddress = 'mail2@address'
Parameter
type name summary
​mixed ...$variadic 一意キー値
Return
type summary
TableGateway

[m] select 駆動表を省略できる ryunosuke\dbml\Database::select()")

駆動表を省略できる ryunosuke\dbml\Database::select()
public function select( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] array

public function array( mixed $tableDescriptor = [], mixed $where = [], mixed $orderBy = [], mixed $limit = [], mixed $groupBy = [], mixed $having = [] ): array|ryunosuke\dbml\Entity\Entityable[]
Parameter
type name summary
​mixed $tableDescriptor = []
​mixed $where = []
​mixed $orderBy = []
​mixed $limit = []
​mixed $groupBy = []
​mixed $having = []
Return
type summary
​array|​Entityable[]

[m] arrayOrThrow ryunosuke\dbml\Database::selectArray()") の例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の例外送出版(ryunosuke\dbml\Database::fetchArray() も参照)
public function arrayOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectArrayOrThrow() ryunosuke\dbml\Database::selectArray()") の例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] arrayInShare ryunosuke\dbml\Database::selectArray()") の共有ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の共有ロック版(ryunosuke\dbml\Database::fetchArray() も参照)
public function arrayInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectArrayInShare() ryunosuke\dbml\Database::selectArray()") の共有ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] arrayForUpdate ryunosuke\dbml\Database::selectArray()") の排他ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の排他ロック版(ryunosuke\dbml\Database::fetchArray() も参照)
public function arrayForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectArrayForUpdate() ryunosuke\dbml\Database::selectArray()") の排他ロック版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] arrayForAffect ryunosuke\dbml\Database::selectArray()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

ryunosuke\dbml\Database::selectArray() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray() も参照)
public function arrayForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectArrayForAffect() ryunosuke\dbml\Database::selectArray()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchArray()") も参照)

[m] assoc レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function assoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectAssoc() レコード群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] assocOrThrow ryunosuke\dbml\Database::selectAssoc()") の例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の例外送出版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function assocOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectAssocOrThrow() ryunosuke\dbml\Database::selectAssoc()") の例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] assocInShare ryunosuke\dbml\Database::selectAssoc()") の共有ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の共有ロック版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function assocInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectAssocInShare() ryunosuke\dbml\Database::selectAssoc()") の共有ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] assocForUpdate ryunosuke\dbml\Database::selectAssoc()") の排他ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の排他ロック版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function assocForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectAssocForUpdate() ryunosuke\dbml\Database::selectAssoc()") の排他ロック版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] assocForAffect ryunosuke\dbml\Database::selectAssoc()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

ryunosuke\dbml\Database::selectAssoc() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function assocForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectAssocForAffect() ryunosuke\dbml\Database::selectAssoc()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchAssoc()") も参照)

[m] lists レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists()") も参照)

レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists() も参照)
public function lists( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectLists() レコード群を[value]で返す(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] listsOrThrow ryunosuke\dbml\Database::selectLists()") の例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の例外送出版(ryunosuke\dbml\Database::fetchLists() も参照)
public function listsOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectListsOrThrow() ryunosuke\dbml\Database::selectLists()") の例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] listsInShare ryunosuke\dbml\Database::selectLists()") の共有ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の共有ロック版(ryunosuke\dbml\Database::fetchLists() も参照)
public function listsInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectListsInShare() ryunosuke\dbml\Database::selectLists()") の共有ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] listsForUpdate ryunosuke\dbml\Database::selectLists()") の排他ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の排他ロック版(ryunosuke\dbml\Database::fetchLists() も参照)
public function listsForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectListsForUpdate() ryunosuke\dbml\Database::selectLists()") の排他ロック版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] listsForAffect ryunosuke\dbml\Database::selectLists()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

ryunosuke\dbml\Database::selectLists() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists() も参照)
public function listsForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectListsForAffect() ryunosuke\dbml\Database::selectLists()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchLists()") も参照)

[m] pairs レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs()") も参照)

レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs() も参照)
public function pairs( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectPairs() レコード群を[key => value]で返す(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] pairsOrThrow ryunosuke\dbml\Database::selectPairs()") の例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の例外送出版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function pairsOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectPairsOrThrow() ryunosuke\dbml\Database::selectPairs()") の例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] pairsInShare ryunosuke\dbml\Database::selectPairs()") の共有ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の共有ロック版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function pairsInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectPairsInShare() ryunosuke\dbml\Database::selectPairs()") の共有ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] pairsForUpdate ryunosuke\dbml\Database::selectPairs()") の排他ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の排他ロック版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function pairsForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectPairsForUpdate() ryunosuke\dbml\Database::selectPairs()") の排他ロック版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] pairsForAffect ryunosuke\dbml\Database::selectPairs()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

ryunosuke\dbml\Database::selectPairs() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs() も参照)
public function pairsForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectPairsForAffect() ryunosuke\dbml\Database::selectPairs()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchPairs()") も参照)

[m] tuple レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple() も参照)
public function tuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectTuple() レコードを配列で返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] tupleOrThrow ryunosuke\dbml\Database::selectTuple()") の例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の例外送出版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function tupleOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectTupleOrThrow() ryunosuke\dbml\Database::selectTuple()") の例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] tupleInShare ryunosuke\dbml\Database::selectTuple()") の共有ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の共有ロック版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function tupleInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectTupleInShare() ryunosuke\dbml\Database::selectTuple()") の共有ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] tupleForUpdate ryunosuke\dbml\Database::selectTuple()") の排他ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の排他ロック版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function tupleForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectTupleForUpdate() ryunosuke\dbml\Database::selectTuple()") の排他ロック版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] tupleForAffect ryunosuke\dbml\Database::selectTuple()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

ryunosuke\dbml\Database::selectTuple() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple() も参照)
public function tupleForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectTupleForAffect() ryunosuke\dbml\Database::selectTuple()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchTuple()") も参照)

[m] value カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue()") も参照)

カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue() も参照)
public function value( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectMethodTrait::selectValue() カラム値をスカラーで返す(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] valueOrThrow ryunosuke\dbml\Database::selectValue()") の例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の例外送出版(ryunosuke\dbml\Database::fetchValue() も参照)
public function valueOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectOrThrowTrait::selectValueOrThrow() ryunosuke\dbml\Database::selectValue()") の例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] valueInShare ryunosuke\dbml\Database::selectValue()") の共有ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の共有ロック版(ryunosuke\dbml\Database::fetchValue() も参照)
public function valueInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectInShareTrait::selectValueInShare() ryunosuke\dbml\Database::selectValue()") の共有ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] valueForUpdate ryunosuke\dbml\Database::selectValue()") の排他ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の排他ロック版(ryunosuke\dbml\Database::fetchValue() も参照)
public function valueForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForUpdateTrait::selectValueForUpdate() ryunosuke\dbml\Database::selectValue()") の排他ロック版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] valueForAffect ryunosuke\dbml\Database::selectValue()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

ryunosuke\dbml\Database::selectValue() の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue() も参照)
public function valueForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectForAffectTrait::selectValueForAffect() ryunosuke\dbml\Database::selectValue()") の排他ロック兼例外送出版(ryunosuke\dbml\Database::fetchValue()") も参照)

[m] selectFind 主キーが指定されたクエリビルダを返す

主キーが指定されたクエリビルダを返す
public function selectFind( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder

引数がかなりややこしいことになっている。複合主キーが id1, id2, id3 というテーブルだとすると

  • find([10, 20, 30]) のように呼び出した(配列指定主キー)

  • find(10, 20, 30) のように呼び出した(可変長引数主キー)

  • 上記は2つとも id1 = 10, id2 = 20, id3 = 30 とみなされる

  • find([10, 20, 30], ['column1', 'column2']) のように呼び出した(配列指定主キー+配列指定カラム)

  • find([10, 20, 30], 'column1', 'column2') のように呼び出した(配列指定主キー+可変長引数カラム)

  • find(10, 20, 30, ['column1', 'column2']) のように呼び出した(可変長引数主キー+配列指定カラム)

  • 上記はすべて id1 = 10, id2 = 20, id3 = 30 とみなされるとともに、SELECT 句に column1, column2 が含まれる

この仕様は「主キーを配列で持っている」「主キーを個別に持っている」という2つの状況に簡単に対応するため。 前者の状況はほとんど無いため、実質的な呼び出し方は (10, 20, 30) 方式で十分。

# レコードを1行取得する(単一主キーで全カラムを取得する最もシンプルな例) $row = $gw->find(1); // SELECT * FROM t_table WHERE primary_id = 1 # レコードを1行取得する(複合主キーでカラムを指定して取得するシンプルでない例) $row = $gw->find([1, 2], ['column1', 'column2']); // SELECT column1, column2 FROM t_table WHERE (primary_id1 = 1) AND (primary_id2 = 2)
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[m] find 主キー指定でレコードを取得する

主キー指定でレコードを取得する
public function find( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead FindTrait::find() 主キー指定でレコードを取得する

[m] findOrThrow ryunosuke\dbml\Gateway\TableGateway::find()") の例外送出版

ryunosuke\dbml\Gateway\TableGateway::find() の例外送出版
public function findOrThrow( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead FindTrait::findOrThrow() ryunosuke\dbml\Gateway\TableGateway::find()") の例外送出版

[m] findInShare ryunosuke\dbml\Gateway\TableGateway::find()") の共有ロック版

ryunosuke\dbml\Gateway\TableGateway::find() の共有ロック版
public function findInShare( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead FindTrait::findInShare() ryunosuke\dbml\Gateway\TableGateway::find()") の共有ロック版

[m] findForUpdate ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック版

ryunosuke\dbml\Gateway\TableGateway::find() の排他ロック版
public function findForUpdate( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead FindTrait::findForUpdate() ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック版

[m] findForAffect ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック兼例外送出版

ryunosuke\dbml\Gateway\TableGateway::find() の排他ロック兼例外送出版
public function findForAffect( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead FindTrait::findForAffect() ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック兼例外送出版

[m] selectAggregate 駆動表を省略できる(ryunosuke\dbml\Database::selectAggregate()") を参照)

駆動表を省略できる(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectAggregate( string|array $aggregation, array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​string|​array $aggregation 集約関数名
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectExists EXISTS クエリビルダを返す

EXISTS クエリビルダを返す
public function selectExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
// EXISTS (SELECT * FROM t_table) $db->selectExists('t_table'); // NOT EXISTS (SELECT * FROM t_table WHERE delete_flg = 0) $db->selectNotExists('t_table', ['delete_flg' => 0]);
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder EXISTS クエリビルダ
Prototype
kind source summary
​instead SelectAggregateTrait::selectExists() EXISTS クエリビルダを返す

[m] selectNotExists ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists()") の NOT 版

ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists() の NOT 版
public function selectNotExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder NOT EXISTS クエリビルダ
Prototype
kind source summary
​instead SelectAggregateTrait::selectNotExists() ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists()") の NOT 版

[m] selectCount COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectCount( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectCount() COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectMin MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMin( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMin() MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectMax MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMax( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMax() MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectSum SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectSum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectSum() SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectAvg AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectAvg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectAvg() AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] subselect 駆動表を省略できる ryunosuke\dbml\Database::subselect()")

駆動表を省略できる ryunosuke\dbml\Database::subselect()
public function subselect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] subArray 子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subArray( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectArray() 子供レコード(array)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subAssoc 子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subAssoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectAssoc() 子供レコード(assoc)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subLists 子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subLists( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectLists() 子供レコード(lists)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subPairs 子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subPairs( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectPairs() 子供レコード(pairs)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subTuple 子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subTuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectTuple() 子供レコード(tuple)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subValue 子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect() を参照)
public function subValue( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubSelectTrait::subselectValue() 子供レコード(value)を表すサブビルダを返す(ryunosuke\dbml\Database::subselect()") を参照)

[m] subquery 駆動表を省略できる ryunosuke\dbml\Database::subquery()")

駆動表を省略できる ryunosuke\dbml\Database::subquery()
public function subquery( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] subexists 相関サブクエリの EXISTS を表すビルダを返す

相関サブクエリの EXISTS を表すビルダを返す
public function subexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
// SELECT 句での使用例 $db->select([ 't_article' => [ // 各 t_article に紐づく t_comment にレコードを持つなら true が返される 'has_comment' => $db->subexists('t_comment'), // 各 t_article に紐づく t_comment delete_flg = 0 なレコードを持たないなら true が返される 'has_not_comment' => $db->notSubexists('t_comment', ['delete_flg' => 0]), ], ]); // SELECT // EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS has_comment, // NOT EXISTS (SELECT * FROM t_comment WHERE (delete_flg = '0') AND (t_comment.article_id = t_article.article_id)) AS has_not_comment // FROM t_article // WHERE 句での使用例 $db->select('t_article', [ // 「各記事でコメントを持つ記事」を表す WHERE EXISTS になる $db->subexists('t_comment'), ]); // SELECT // t_article.* // FROM t_article // WHERE (EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id)) // JOIN も含めて複数テーブルがあり、明確に「t_article と t_comment で」結びたい場合はキーで明示する $db->select('t_article, t_something', [ // 「何と?」をキーで明示できる 't_article' => $db->subexists('t_comment'), // これだと t_something と t_comment での結合となる(外部キーがあれば、だが) 't_something' => $db->subexists('t_comment'), // さらに t_something に複数の外部キーがある場合は:で明示できる 't_something:fkname' => $db->subexists('t_comment'), ]);
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト
Prototype
kind source summary
​instead SubAggregateTrait::subexists() 相関サブクエリの EXISTS を表すビルダを返す

[m] notSubexists ryunosuke\dbml\Mixin\SubAggregateTrait::subexists()") の否定版

ryunosuke\dbml\Mixin\SubAggregateTrait::subexists() の否定版
public function notSubexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト
Prototype
kind source summary
​instead SubAggregateTrait::notSubexists() ryunosuke\dbml\Mixin\SubAggregateTrait::subexists()") の否定版

[m] subaggregate 駆動表を省略できる ryunosuke\dbml\Database::subaggregate()")

駆動表を省略できる ryunosuke\dbml\Database::subaggregate()
public function subaggregate( array|string $aggregate, array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $aggregate 集約関数名
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] subcount 相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subcount( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subcount() 相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] submin 相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submin( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submin() 相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] submax 相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submax( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submax() 相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subsum 相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subsum( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subsum() 相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subavg 相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subavg( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subavg() 相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] aggregate 駆動表を省略できる ryunosuke\dbml\Database::aggregate()")

駆動表を省略できる ryunosuke\dbml\Database::aggregate()
public function aggregate( string|array $aggregation, array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​string|​array $aggregation 集約関数名
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] exists レコードの存在を返す

レコードの存在を返す
public function exists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): bool
# 単純に t_article が存在するか bool で返す $db->exists('t_article'); // SELECT EXISTS (SELECT * FROM t_article) # 有効な t_article が存在するか bool で返す $db->exists('t_article', ['delete_flg' => 0]); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0) # 有効な t_article が存在するかロックしつつ bool で返す $db->exists('t_article', ['delete_flg' => 0], true); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0 FOR UPDATE)
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
​bool レコードが存在するなら true
Prototype
kind source summary
​instead AggregateTrait::exists() レコードの存在を返す

[m] count レコード件数を返す

レコード件数を返す
public function count( string|array $column = [], string|array $where = [], string|array $groupBy = [], string|array $having = [] ): int

件数取得は下記の2種類の方法が存在する。

  1. count($gw);
  2. $gw->count('*');

1 は php 標準の count() 関数フックであり、レコードをフェッチしてその件数を返す。 2 は メソッドコールであり、COUNT クエリを発行する。 当たっている WHERE が同じであれば結果も同じになるが、その内部処理は大きく異なる。

内部的にメソッド呼び出しと count 呼び出しを判断する術がないので引数で分岐している。

Parameter
type name summary
​string|​array $column = [] SELECT 句
​string|​array $where = [] WHERE 句
​string|​array $groupBy = [] GROUP BY 句
​string|​array $having = [] HAVING 句
Return
type summary
​int
Prototype
kind source summary
​implement Countable::count()
​instead AggregateTrait::count() COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] min MIN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MIN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function min( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::min() MIN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] max MAX クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MAX クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function max( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::max() MAX クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] sum SUM クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

SUM クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function sum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::sum() SUM クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] avg AVG クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

AVG クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function avg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::avg() AVG クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] neighbor 前後のレコードを返す(ryunosuke\dbml\Query\SelectBuilder::neighbor()") を参照)

前後のレコードを返す(ryunosuke\dbml\Query\SelectBuilder::neighbor() を参照)
public function neighbor( array $predicates, int $limit = 1 ): array
Parameter
type name summary
​array $predicates
​int $limit = 1
Return
type summary
​array

[m] paginate new Paginator へのプロキシメソッド

new Paginator へのプロキシメソッド
public function paginate( ?int|int $currentpage, ?int|int $countperpage ): ryunosuke\dbml\Query\Pagination\Paginator

引数が与えられている場合は ryunosuke\dbml\Query\Pagination\Paginator::paginate() も同時に行う。

Parameter
type name summary
​?int|​int $currentpage
​?int|​int $countperpage
Return
type summary
Paginator

[m] sequence new Sequencer へのプロキシメソッド

new Sequencer へのプロキシメソッド
public function sequence( ?array|array $condition, ?int|int $count, ?bool|bool $orderbyasc = true ): ryunosuke\dbml\Query\Pagination\Sequencer

引数が与えられている場合は ryunosuke\dbml\Query\Pagination\Sequencer::sequence() も同時に行う。

Parameter
type name summary
​?array|​array $condition
​?int|​int $count
​?bool|​bool $orderbyasc = true
Return
type summary
Sequencer

[m] chunk 分割して sequence してレコードジェネレータを返す

分割して sequence してレコードジェネレータを返す
public function chunk( int $count, ?string $column = null, $fixrange = false ): \Generator
Parameter
type name summary
​int $count
​?string $column = null
$fixrange = false
Return
type summary
Generator

[m] getEmptyRecord 空レコードを返す

空レコードを返す
public function getEmptyRecord(array|ryunosuke\dbml\Entity\Entityable $default = []): array|ryunosuke\dbml\Entity\Entityable
Parameter
type name summary
​array|​Entityable $default = [] レコードのデフォルト値
Return
type summary
​array|​Entityable 空レコード

[m] gather レコード情報をかき集める

レコード情報をかき集める
public function gather( array $wheres = [], array $other_wheres = [], bool $parentive = false ): array
Parameter
type name summary
​array $wheres = [] 対象テーブルの条件
​array $other_wheres = [] その他の条件
​bool $parentive = false 親方向にたどるか子方向に辿るか
Return
type summary
​array

[m] differ レコード配列の差分をとる

レコード配列の差分をとる
public function differ( array $array, $wheres = [] ): array
Parameter
type name summary
​array $array
$wheres = []
Return
type summary
​array

[m] insertSelect 駆動表を省略できる ryunosuke\dbml\Database::insertSelect()")

駆動表を省略できる ryunosuke\dbml\Database::insertSelect()
public function insertSelect( string|ryunosuke\dbml\Query\SelectBuilder $sql, array $columns = [], iterable|array $params = [], ...$opt ): int|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​string|​SelectBuilder $sql SELECT クエリ
​array $columns = [] カラム定義
​iterable|​array $params = [] bind パラメータ
...$opt
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] insertArray 駆動表を省略できる ryunosuke\dbml\Database::insertArray()")

駆動表を省略できる ryunosuke\dbml\Database::insertArray()
public function insertArray( array|\Generator $data, ...$opt ): int|array|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​int|​array|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] insertArrayOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insertArray()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insertArray()
public function insertArrayOrThrow( array|\Generator $data, ...$opt ): array|string
Parameter
type name summary
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::insertArrayOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insertArray()")

[m] updateArray 駆動表を省略できる ryunosuke\dbml\Database::updateArray()")

駆動表を省略できる ryunosuke\dbml\Database::updateArray()
public function updateArray( array|\Generator $data, array|mixed $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $data カラムデータ配列あるいは Generator
​array|​mixed $where = [] 束縛条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] updateArrayAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::updateArray()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::updateArray()
public function updateArrayAndBefore( array|\Generator $data, array|mixed $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $data カラムデータ配列あるいは Generator
​array|​mixed $where = [] 束縛条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::updateArrayAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::updateArray()")

[m] deleteArray 駆動表を省略できる ryunosuke\dbml\Database::deleteArray()")

駆動表を省略できる ryunosuke\dbml\Database::deleteArray()
public function deleteArray( array|\Generator $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $where = [] 削除条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] deleteArrayAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::deleteArray()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::deleteArray()
public function deleteArrayAndBefore( array|\Generator $where = [], ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $where = [] 削除条件
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::deleteArrayAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::deleteArray()")

[m] modifyArray 駆動表を省略できる ryunosuke\dbml\Database::modifyArray()")

駆動表を省略できる ryunosuke\dbml\Database::modifyArray()
public function modifyArray( array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] modifyArrayAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()
public function modifyArrayAndBefore( array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectAndBeforeTrait::modifyArrayAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()")

[m] changeArray 駆動表を省略できる ryunosuke\dbml\Database::changeArray()")

駆動表を省略できる ryunosuke\dbml\Database::changeArray()
public function changeArray( array $dataarray, array|mixed $where, string $uniquekey = "PRIMARY", ?array $returning = [], ...$opt ): array
Parameter
type name summary
​array $dataarray カラムデータ配列あるいは Generator
​array|​mixed $where 束縛条件。 false を与えると DELETE 文自体を発行しない(速度向上と安全担保)
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
​?array $returning = [] 返り値の制御変数。配列を与えるとそのカラムの SELECT 結果を返す(null は主キーを表す)
...$opt
Return
type summary
​array 基本的には主キー配列. dryrun 中は SQL をネストして返す

[m] affectArray 駆動表を省略できる ryunosuke\dbml\Database::affectArray()")

駆動表を省略できる ryunosuke\dbml\Database::affectArray()
public function affectArray( array $dataarray, ...$opt ): array
Parameter
type name summary
​array $dataarray カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array 基本的には主キー配列. dryrun 中は SQL をネストして返す

[m] save 駆動表を省略できる ryunosuke\dbml\Database::save()")

駆動表を省略できる ryunosuke\dbml\Database::save()
public function save( array $data, ...$opt ): array|string[]
Parameter
type name summary
​array $data 階層を持ったデータ配列
...$opt
Return
type summary
​array|​string[] 基本的には階層を持った主キー配列. dryrun 中は文字列配列

[m] insert 駆動表を省略できる ryunosuke\dbml\Database::insert()")

駆動表を省略できる ryunosuke\dbml\Database::insert()
public function insert( mixed $data, ...$opt ): int|array|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data INSERT データ配列
...$opt
Return
type summary
​int|​array|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] insertOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insert()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insert()
public function insertOrThrow( mixed $data, ...$opt ): array|string
Parameter
type name summary
​mixed $data INSERT データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::insertOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::insert()")

[m] insertAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::insert()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::insert()
public function insertAndPrimary( mixed $data, ...$opt ): array|string
Parameter
type name summary
​mixed $data INSERT データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::insertAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::insert()")

[m] update 駆動表を省略できる ryunosuke\dbml\Database::update()")

駆動表を省略できる ryunosuke\dbml\Database::update()
public function update( mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] updateOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::update()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::update()
public function updateOrThrow( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::updateOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::update()")

[m] updateAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::update()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::update()
public function updateAndPrimary( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::updateAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::update()")

[m] updateAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::update()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::update()
public function updateAndBefore( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::updateAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::update()")

[m] delete 駆動表を省略できる ryunosuke\dbml\Database::delete()")

駆動表を省略できる ryunosuke\dbml\Database::delete()
public function delete( array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] deleteOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::delete()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::delete()
public function deleteOrThrow( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::deleteOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::delete()")

[m] deleteAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::delete()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::delete()
public function deleteAndPrimary( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::deleteAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::delete()")

[m] deleteAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::delete()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::delete()
public function deleteAndBefore( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::deleteAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::delete()")

[m] invalid 駆動表を省略できる ryunosuke\dbml\Database::invalid()")

駆動表を省略できる ryunosuke\dbml\Database::invalid()
public function invalid( array|mixed $where, ?array $invalid_columns = null, ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] invalidOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::invalid()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::invalid()
public function invalidOrThrow( array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::invalidOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::invalid()")

[m] invalidAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::invalid()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::invalid()
public function invalidAndPrimary( array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::invalidAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::invalid()")

[m] invalidAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::invalid()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::invalid()
public function invalidAndBefore( array|mixed $where, ?array $invalid_columns = null, ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where WHERE 条件
​?array $invalid_columns = null 無効カラム値
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::invalidAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::invalid()")

[m] revise 駆動表を省略できる ryunosuke\dbml\Database::revise()")

駆動表を省略できる ryunosuke\dbml\Database::revise()
public function revise( mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] reviseOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::revise()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::revise()
public function reviseOrThrow( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::reviseOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::revise()")

[m] reviseAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::revise()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::revise()
public function reviseAndPrimary( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::reviseAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::revise()")

[m] reviseAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::revise()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::revise()
public function reviseAndBefore( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::reviseAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::revise()")

[m] upgrade 駆動表を省略できる ryunosuke\dbml\Database::upgrade()")

駆動表を省略できる ryunosuke\dbml\Database::upgrade()
public function upgrade( mixed $data, array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] upgradeOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upgrade()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upgrade()
public function upgradeOrThrow( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::upgradeOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upgrade()")

[m] upgradeAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()
public function upgradeAndPrimary( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::upgradeAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()")

[m] upgradeAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()
public function upgradeAndBefore( mixed $data, array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​mixed $data UPDATE データ配列
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::upgradeAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::upgrade()")

[m] remove 駆動表を省略できる ryunosuke\dbml\Database::remove()")

駆動表を省略できる ryunosuke\dbml\Database::remove()
public function remove( array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] removeOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::remove()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::remove()
public function removeOrThrow( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::removeOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::remove()")

[m] removeAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::remove()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::remove()
public function removeAndPrimary( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::removeAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::remove()")

[m] removeAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::remove()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::remove()
public function removeAndBefore( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::removeAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::remove()")

[m] destroy 駆動表を省略できる ryunosuke\dbml\Database::destroy()")

駆動表を省略できる ryunosuke\dbml\Database::destroy()
public function destroy( array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] destroyOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::destroy()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::destroy()
public function destroyOrThrow( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::destroyOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::destroy()")

[m] destroyAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::destroy()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::destroy()
public function destroyAndPrimary( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::destroyAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::destroy()")

[m] destroyAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::destroy()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::destroy()
public function destroyAndBefore( array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::destroyAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::destroy()")

[m] reduce 駆動表を省略できる ryunosuke\dbml\Database::reduce()")

駆動表を省略できる ryunosuke\dbml\Database::reduce()
public function reduce( ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] reduceOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::reduce()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::reduce()
public function reduceOrThrow( ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::reduceOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::reduce()")

[m] reduceAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::reduce()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::reduce()
public function reduceAndBefore( ?int $limit = null, string|array $orderBy = [], string|array $groupBy = [], array|mixed $where = [], ...$opt ): array|string
Parameter
type name summary
​?int $limit = null 残す件数
​string|​array $orderBy = [] 並び順
​string|​array $groupBy = [] グルーピング条件
​array|​mixed $where = [] WHERE 条件
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectAndBeforeTrait::reduceAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::reduce()")

[m] upsert 駆動表を省略できる ryunosuke\dbml\Database::upsert()")

駆動表を省略できる ryunosuke\dbml\Database::upsert()
public function upsert( mixed $insertData, mixed $updateData = [], ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] upsertOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upsert()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upsert()
public function upsertOrThrow( mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::upsertOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upsert()")

[m] upsertAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::upsert()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::upsert()
public function upsertAndPrimary( mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::upsertAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::upsert()")

[m] upsertAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::upsert()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::upsert()
public function upsertAndBefore( mixed $insertData, mixed $updateData = [], ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::upsertAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::upsert()")

[m] modify 駆動表を省略できる ryunosuke\dbml\Database::modify()")

駆動表を省略できる ryunosuke\dbml\Database::modify()
public function modify( mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] modifyOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::modify()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::modify()
public function modifyOrThrow( mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::modifyOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::modify()")

[m] modifyAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::modify()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::modify()
public function modifyAndPrimary( mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::modifyAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::modify()")

[m] modifyAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::modify()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::modify()
public function modifyAndBefore( mixed $insertData, mixed $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​mixed $insertData INSERT データ配列
​mixed $updateData = [] UPDATE データ配列
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::modifyAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::modify()")

[m] replace 駆動表を省略できる ryunosuke\dbml\Database::replace()")

駆動表を省略できる ryunosuke\dbml\Database::replace()
public function replace( mixed $data, ...$opt ): int|array|array[]|ryunosuke\dbml\Entity\Entity[]|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​int|​array|​array[]|​Entity[]|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement

[m] replaceOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::replace()")

作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::replace()
public function replaceOrThrow( mixed $data, ...$opt ): array|string
Parameter
type name summary
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Throws
type summary
NonAffectedException
Prototype
kind source summary
​instead AffectOrThrowTrait::replaceOrThrowWithoutTable() 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::replace()")

[m] replaceAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::replace()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::replace()
public function replaceAndPrimary( mixed $data, ...$opt ): array|string
Parameter
type name summary
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndPrimaryTrait::replaceAndPrimaryWithoutTable() 主キーを返す ryunosuke\dbml\Gateway\TableGateway::replace()")

[m] replaceAndBefore レコードを返す ryunosuke\dbml\Gateway\TableGateway::replace()")

レコードを返す ryunosuke\dbml\Gateway\TableGateway::replace()
public function replaceAndBefore( mixed $data, ...$opt ): array|string
Parameter
type name summary
​mixed $data REPLACE データ配列
...$opt
Return
type summary
​array|​string
Prototype
kind source summary
​instead AffectAndBeforeTrait::replaceAndBeforeWithoutTable() レコードを返す ryunosuke\dbml\Gateway\TableGateway::replace()")

[m] truncate 駆動表を省略できる ryunosuke\dbml\Database::truncate()")

駆動表を省略できる ryunosuke\dbml\Database::truncate()
public function truncate(): int|string[]|ryunosuke\dbml\Query\Statement
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] eliminate 駆動表を省略できる ryunosuke\dbml\Database::eliminate()")

駆動表を省略できる ryunosuke\dbml\Database::eliminate()
public function eliminate(): int|string[]|ryunosuke\dbml\Query\Statement
Return
type summary
​int|​string[]|​Statement 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement

[m] getLastInsertId 最後に挿入した ID を返す

最後に挿入した ID を返す
public function getLastInsertId(?string $columnname = null): string|int|null
Parameter
type name summary
​?string $columnname = null
Return
type summary
​string|​int|​null

[m] resetAutoIncrement 自動採番列をリセットする

自動採番列をリセットする
public function resetAutoIncrement(?int $seq = 1)
Parameter
type name summary
​?int $seq = 1

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​instead OptionTrait::checkUnknownOption()

[m] yieldArray レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)

レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray() を参照)
public function yieldArray( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldArray() レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)

[m] yieldAssoc レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc()") を参照)

レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc() を参照)
public function yieldAssoc( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldAssoc() レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc()") を参照)

[m] yieldLists レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists()") を参照)

レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists() を参照)
public function yieldLists( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldLists() レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists()") を参照)

[m] yieldPairs レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs()") を参照)

レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs() を参照)
public function yieldPairs( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead YieldTrait::yieldPairs() レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs()") を参照)

[m] exportArray レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray()") を参照)

レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray() を参照)
public function exportArray( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportArray() レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray()") を参照)

[m] exportCsv レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv()") を参照)

レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv() を参照)
public function exportCsv( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportCsv() レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv()") を参照)

[m] exportJson レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson()") を参照)

レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson() を参照)
public function exportJson( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []
Prototype
kind source summary
​instead ExportTrait::exportJson() レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson()") を参照)

[m] selectMedian MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMedian( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectMedian() MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] selectJson JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectJson( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SelectAggregateTrait::selectJson() JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

[m] countAggregate COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function countAggregate( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::count() COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] median MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function median( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::median() MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] json JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function json( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果
Prototype
kind source summary
​instead AggregateTrait::json() JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

[m] submedian 相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submedian( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::submedian() 相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] subjson 相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subjson( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead SubAggregateTrait::subjson() 相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

[m] create insertOrThrow のエイリアス

insertOrThrow のエイリアス
public function create( mixed $data, ...$opt ): int|array|string[]|ryunosuke\dbml\Query\Statement
Parameter
type name summary
​mixed $data INSERT データ配列
...$opt
Return
type summary
​int|​array|​string[]|​Statement 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement
Prototype
kind source summary
​instead AffectOrThrowTrait::createWithoutTable() insertOrThrow のエイリアス
See
type summary
AffectOrThrowTrait::createWithTable()

[m] insertArrayAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::insertArray()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::insertArray()
public function insertArrayAndPrimary( array|\Generator $data, ...$opt ): array|string
Parameter
type name summary
​array|​Generator $data カラムデータ配列あるいは Generator
...$opt
Return
type summary
​array|​string

[m] modifyArrayAndPrimary 主キーを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()")

主キーを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()
public function modifyArrayAndPrimary( array|\Generator $insertData, array $updateData = [], string $uniquekey = "PRIMARY", ...$opt ): array|string
Parameter
type name summary
​array|​Generator $insertData カラムデータ配列あるいは Generator
​array $updateData = [] カラムデータ
​string $uniquekey = "PRIMARY" 重複チェックに使うユニークキー名
...$opt
Return
type summary
​array|​string

[m] getImmutable

public function getImmutable(): bool
Return
type summary
​bool

[m] setImmutable

public function setImmutable(mixed $immutableMode): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​mixed $immutableMode
Return
type summary
TableGateway

[m] getDefaultIteration

public function getDefaultIteration(): string
Return
type summary
​string

[m] setDefaultIteration

public function setDefaultIteration(mixed $iterationMode): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​mixed $iterationMode
Return
type summary
TableGateway

[m] getDefaultJoinMethod

public function getDefaultJoinMethod(): string
Return
type summary
​string

[m] setDefaultJoinMethod

public function setDefaultJoinMethod(mixed $string): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​mixed $string
Return
type summary
TableGateway

[m] getIgnoreAffectScope

public function getIgnoreAffectScope(): array
Return
type summary
​array

[m] setIgnoreAffectScope

public function setIgnoreAffectScope(array $ignoreAffectScope): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
​array $ignoreAffectScope
Return
type summary
TableGateway

[m] getScopeRenamer

public function getScopeRenamer(): \Closure
Return
type summary
Closure

[m] setScopeRenamer

public function setScopeRenamer(\Closure $scopeRenamer): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
Closure $scopeRenamer
Return
type summary
TableGateway

[m] getColumnRenamer

public function getColumnRenamer(): \Closure
Return
type summary
Closure

[m] setColumnRenamer これは phpstorm の as keyword が修正されたら不要になる

これは phpstorm の as keyword が修正されたら不要になる
public function setColumnRenamer(\Closure $columnRenamer): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
Closure $columnRenamer
Return
type summary
TableGateway

[N] ryunosuke\dbml\Generator\

[C] Yielder 少しずつ fetch する Generator のようなクラス

少しずつ fetch する Generator のようなクラス

Implements
type summary
IteratorAggregate
Traversable
Uses
type summary
DebugInfoTrait

[m] __construct コンストラクタ

コンストラクタ
public function __construct( Doctrine\DBAL\Result|\Closure $statement, ryunosuke\dbml\Metadata\CompatibleConnection $cconnection, ?string $method = null, ?callable $callback = null, ?int $chunk = null )
Parameter
type name summary
Result|​Closure $statement 取得に使用される \Statement
CompatibleConnection $cconnection 取得に使用するコネクション
​?string $method = null フェッチメソッド名
​?callable $callback = null $chunk 行ごとに呼ばれるコールバック処理
​?int $chunk = null コールバック処理のチャンク数。指定するとその数だけバッファリングされるので留意

[m] __destruct デストラクタ

デストラクタ
public function __destruct()

設定を戻したりカーソルを閉じたりする。

[m] setFetchMethod フェッチメソッドを設定する

フェッチメソッドを設定する
public function setFetchMethod(string $method): ryunosuke\dbml\Generator\Yielder
Parameter
type name summary
​string $method
Return
type summary
Yielder

[m] setBufferMode mysql におけるバッファモード/非バッファモードを切り替える

mysql におけるバッファモード/非バッファモードを切り替える
public function setBufferMode(bool $mode): ryunosuke\dbml\Generator\Yielder

このメソッドを true で呼び出すと「同時にクエリを実行できない代わりに省メモリモード」で動作する。 詳細は 公式マニュアルを参照。

foreach ($db->yieldAssoc($sql)->setBufferMode(false) as $key => $row) { // このループは非バッファモードで動作する(このブロック内で別のクエリを投げることは出来ない) var_dump($row); }

「同時にクエリを実行できない」は Database::sub 系クエリが使えないことを意味するので、本当に必要な時以外は呼ばなくていい。

Parameter
type name summary
​bool $mode
Return
type summary
Yielder

[m] setEmulationUnique FETCH_UNIQUE の動作を模倣するか設定

FETCH_UNIQUE の動作を模倣するか設定
public function setEmulationUnique(bool $mode): ryunosuke\dbml\Generator\Yielder

このクラスは foreach で回せるが、逐次取得なので FETCH_UNIQUE 相当の動作(キーを最初のカラムにする)ができない。 (ループ処理そのものなので重複処理が行えない)。 このメソッドを true で呼び出すとアプリレイヤーでなんとかしてその動作を模倣するようになる。

要するに「キーが連番になるか最初のカラム値になるか」を指定する。

foreach ($db->yieldAssoc($sql)->setEmulationUnique(true) as $key => $row) { // $key が「レコードの最初のカラム値」を表すようになる var_dump($key); }

とはいえデフォルトで true なので明示的に呼ぶ必要はほとんど無い。 上記のコードを false にすると挙動が分かりやすい。

Parameter
type name summary
​bool $mode
Return
type summary
Yielder

[m] getIterator

public function getIterator(): \Traversable
Return
type summary
Traversable
Prototype
kind source summary
​implement IteratorAggregate::getIterator()

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[C] AbstractGenerator 行ごとに何らかの変換を通して返す抽象クラス

行ごとに何らかの変換を通して返す抽象クラス

Hierarchy

[C] BOM

protected const string BOM = ""

[p] $config

protected array $config

Type: array

[m] __construct

public function __construct(array $config = [])
Parameter
type name summary
​array $config = []

[m] generate 出力場所とデータプロバイダを与えて出力する

出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
Parameter
type name summary
​string|​resource $location 出力場所。null を与えると標準出力、文字列を与えるとファイルになる
​iterable $provider 行を1行ずつ返す行プロバイダ
Return
type summary
​int 書き込みバイト数

[m] initProvider プロバイダの初期設定を行う

プロバイダの初期設定を行う
abstract protected function initProvider(iterable $provider)
Parameter
type name summary
​iterable $provider 行を1行ずつ返す行プロバイダ

[m] generateHead head を出力する

head を出力する
abstract protected function generateHead(resource $resource)

例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース

[m] generateBody body を出力する

body を出力する
abstract protected function generateBody( resource $resource, int|string $key, array $value, bool $first_flg )

例えば csv なら "a,b,c"、 json なら "" のようなデータ本体を出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
​int|​string $key 行のキー
​array $value
​bool $first_flg 初回ループ(最初の出力)なら true

[m] generateTail tail を出力する

tail を出力する
abstract protected function generateTail(resource $resource)

json なら ]} などの閉じブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース

[C] ArrayGenerator 行ごとに php 配列化する出力クラス

行ごとに php 配列化する出力クラス

Hierarchy

Parents
type summary
AbstractGenerator 行ごとに何らかの変換を通して返す抽象クラス

[C] BOM

protected const string BOM = ""
Prototype
kind source summary
​inherit AbstractGenerator::BOM

[p] $config

protected array $config

Type: array

Prototype
kind source summary
​inherit AbstractGenerator::$config

[m] __construct

public function __construct(array $config = [])
Parameter
type name summary
​array $config = []
Prototype
kind source summary
​override AbstractGenerator::__construct()

[m] initProvider プロバイダの初期設定を行う

プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
Parameter
type name summary
​iterable $provider 行を1行ずつ返す行プロバイダ
Prototype
kind source summary
​override AbstractGenerator::initProvider() プロバイダの初期設定を行う

[m] generateHead head を出力する

head を出力する
protected function generateHead(resource $resource)

例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateHead() head を出力する

[m] generateBody body を出力する

body を出力する
protected function generateBody( resource $resource, int|string $key, array $value, bool $first_flg )

例えば csv なら "a,b,c"、 json なら "" のようなデータ本体を出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
​int|​string $key 行のキー
​array $value
​bool $first_flg 初回ループ(最初の出力)なら true
Prototype
kind source summary
​override AbstractGenerator::generateBody() body を出力する

[m] generateTail tail を出力する

tail を出力する
protected function generateTail(resource $resource)

json なら ]} などの閉じブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateTail() tail を出力する

[m] generate 出力場所とデータプロバイダを与えて出力する

出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
Parameter
type name summary
​string|​resource $location 出力場所。null を与えると標準出力、文字列を与えるとファイルになる
​iterable $provider 行を1行ずつ返す行プロバイダ
Return
type summary
​int 書き込みバイト数
Prototype
kind source summary
​inherit AbstractGenerator::generate() 出力場所とデータプロバイダを与えて出力する

[C] CsvGenerator 行ごとに CSV 化する出力クラス

行ごとに CSV 化する出力クラス

Hierarchy

Parents
type summary
AbstractGenerator 行ごとに何らかの変換を通して返す抽象クラス

[C] BOM

protected const string BOM = ""
Prototype
kind source summary
​inherit AbstractGenerator::BOM

[p] $config

protected array $config

Type: array

Prototype
kind source summary
​inherit AbstractGenerator::$config

[m] __construct

public function __construct(array $config = [])
Parameter
type name summary
​array $config = []
Prototype
kind source summary
​override AbstractGenerator::__construct()

[m] initProvider プロバイダの初期設定を行う

プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
Parameter
type name summary
​iterable $provider 行を1行ずつ返す行プロバイダ
Prototype
kind source summary
​override AbstractGenerator::initProvider() プロバイダの初期設定を行う

[m] generateHead head を出力する

head を出力する
protected function generateHead(resource $resource)

例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateHead() head を出力する

[m] generateBody body を出力する

body を出力する
protected function generateBody( resource $resource, int|string $key, array $value, bool $first_flg )

例えば csv なら "a,b,c"、 json なら "" のようなデータ本体を出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
​int|​string $key 行のキー
​array $value
​bool $first_flg 初回ループ(最初の出力)なら true
Prototype
kind source summary
​override AbstractGenerator::generateBody() body を出力する

[m] generateTail tail を出力する

tail を出力する
protected function generateTail(resource $resource)

json なら ]} などの閉じブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateTail() tail を出力する

[m] generate 出力場所とデータプロバイダを与えて出力する

出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
Parameter
type name summary
​string|​resource $location 出力場所。null を与えると標準出力、文字列を与えるとファイルになる
​iterable $provider 行を1行ずつ返す行プロバイダ
Return
type summary
​int 書き込みバイト数
Prototype
kind source summary
​inherit AbstractGenerator::generate() 出力場所とデータプロバイダを与えて出力する

[C] JsonGenerator 行ごとに JSON 化する出力クラス

行ごとに JSON 化する出力クラス

Hierarchy

Parents
type summary
AbstractGenerator 行ごとに何らかの変換を通して返す抽象クラス

[C] BOM

protected const string BOM = ""
Prototype
kind source summary
​inherit AbstractGenerator::BOM

[p] $config

protected array $config

Type: array

Prototype
kind source summary
​inherit AbstractGenerator::$config

[m] __construct

public function __construct(array $config = [])
Parameter
type name summary
​array $config = []
Prototype
kind source summary
​override AbstractGenerator::__construct()

[m] initProvider プロバイダの初期設定を行う

プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
Parameter
type name summary
​iterable $provider 行を1行ずつ返す行プロバイダ
Prototype
kind source summary
​override AbstractGenerator::initProvider() プロバイダの初期設定を行う

[m] generateHead head を出力する

head を出力する
protected function generateHead(resource $resource)

例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateHead() head を出力する

[m] generateBody body を出力する

body を出力する
protected function generateBody( resource $resource, int|string $key, array $value, bool $first_flg )

例えば csv なら "a,b,c"、 json なら "" のようなデータ本体を出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
​int|​string $key 行のキー
​array $value
​bool $first_flg 初回ループ(最初の出力)なら true
Prototype
kind source summary
​override AbstractGenerator::generateBody() body を出力する

[m] generateTail tail を出力する

tail を出力する
protected function generateTail(resource $resource)

json なら ]} などの閉じブレースを出力する。

Parameter
type name summary
​resource $resource 書き込み先リソース
Prototype
kind source summary
​override AbstractGenerator::generateTail() tail を出力する

[m] generate 出力場所とデータプロバイダを与えて出力する

出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
Parameter
type name summary
​string|​resource $location 出力場所。null を与えると標準出力、文字列を与えるとファイルになる
​iterable $provider 行を1行ずつ返す行プロバイダ
Return
type summary
​int 書き込みバイト数
Prototype
kind source summary
​inherit AbstractGenerator::generate() 出力場所とデータプロバイダを与えて出力する

[N] ryunosuke\dbml\Logging\

[C] LoggerChain ログラッパー

ログラッパー

配下にある PSR-3 に委譲するだけで自身は何もしない。

Hierarchy

Parents
type summary
AbstractLogger This is a simple Logger implementation that other Loggers can inherit from.
Implements
type summary
LoggerInterface Describes a logger instance.
LoggerAwareInterface Describes a logger-aware instance.

[m] log Logs with an arbitrary level.

Logs with an arbitrary level.
public function log( mixed $level, \Stringable|string $message, array|mixed[] $context = [] )
Parameter
type name summary
​mixed $level
Stringable|​string $message
​array|​mixed[] $context = []
Throws
type summary
InvalidArgumentException
Prototype
kind source summary
​implement LoggerInterface::log() Logs with an arbitrary level.

[m] setLogger Sets a logger instance on the object.

Sets a logger instance on the object.
public function setLogger(Psr\Log\LoggerInterface $logger)
Parameter
type name summary
LoggerInterface $logger
Prototype
kind source summary
​implement LoggerAwareInterface::setLogger() Sets a logger instance on the object.

[m] addLogger 内部ロガーを追加して設定されていたものを返す

内部ロガーを追加して設定されていたものを返す
public function addLogger( Psr\Log\LoggerInterface $logger, ?string $name = null ): Psr\Log\LoggerInterface[]
Parameter
type name summary
LoggerInterface $logger 追加するロガー
​?string $name = null ロガーの名前
Return
type summary
LoggerInterface[]

[m] resetLoggers 内部ロガーをセットして設定されていたものを返す

内部ロガーをセットして設定されていたものを返す
public function resetLoggers(array|Psr\Log\LoggerInterface[] $loggers): array|Psr\Log\LoggerInterface[]
Parameter
type name summary
​array|​LoggerInterface[] $loggers 追加するロガー
Return
type summary
​array|​LoggerInterface[]

[m] emergency System is unusable.

System is unusable.
public function emergency( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::emergency() System is unusable.

[m] alert Action must be taken immediately.

Action must be taken immediately.
public function alert( \Stringable|string $message, array $context = [] )

Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::alert() Action must be taken immediately.

[m] critical Critical conditions.

Critical conditions.
public function critical( \Stringable|string $message, array $context = [] )

Example: Application component unavailable, unexpected exception.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::critical() Critical conditions.

[m] error Runtime errors that do not require immediate action but should typically

Runtime errors that do not require immediate action but should typically
public function error( \Stringable|string $message, array $context = [] )

be logged and monitored.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::error() Runtime errors that do not require immediate action but should typically

[m] warning Exceptional occurrences that are not errors.

Exceptional occurrences that are not errors.
public function warning( \Stringable|string $message, array $context = [] )

Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::warning() Exceptional occurrences that are not errors.

[m] notice Normal but significant events.

Normal but significant events.
public function notice( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::notice() Normal but significant events.

[m] info Interesting events.

Interesting events.
public function info( \Stringable|string $message, array $context = [] )

Example: User logs in, SQL logs.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::info() Interesting events.

[m] debug Detailed debug information.

Detailed debug information.
public function debug( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::debug() Detailed debug information.

[C] Middleware

Implements
type summary
Middleware

[m] __construct

public function __construct(Psr\Log\LoggerInterface $logger)
Parameter
type name summary
LoggerInterface $logger

[m] wrap

public function wrap(Doctrine\DBAL\Driver $driver): Doctrine\DBAL\Driver
Parameter
type name summary
Driver $driver
Return
type summary
Driver
Prototype
kind source summary
​implement Middleware::wrap()

[m] getLogger

public function getLogger(): Psr\Log\LoggerInterface
Return
type summary
LoggerInterface

[C] Logger スタンダードな SQL ロガー

スタンダードな SQL ロガー

Database の logger オプションにこのインスタンスを渡すとクエリがログられるようになる。

# 標準出力にログる $db = new Database($connection, [ 'logger' => new Logger([ 'destination' => STDOUT ]), ]); # /var/log/query.log にログる $db = new Database($connection, [ 'logger' => new Logger([ 'destination' => '/var/log/query.log' ]), ]); # クロージャでログる $db = new Database($connection, [ 'logger' => new Logger([ 'destination' => function ($log) { echo $log; } ]), ]);

buffer オプションについて

コンストラクタオプションで buffer を渡すと下記のような動作モードになる。 fastcgi_finish_request など、クライアントに速度を意識させない方法があるなら基本的には array を推奨する。 BLOB INSERT が多いとか、軽めのクエリの数が多いとか、バッチで動いているとか、要件・状況に応じて適時変更したほうが良い。

false

逐次書き込む。

逐次変換処理は行われるがメモリは一切消費しないし、ロックも伴わない。 ただし、逐次書き込むのでログがリクエスト単位にならない(別リクエストの割り込みログが発生する)。

int

指定されたサイズでバッファリングして終了時に書き込む(超えた分は一時ファイル書き出し)。

メモリには優しいが、逐次ログの変換処理が発生するため、場合によっては動作速度があまりよろしくない。 終了時にロックして書き込むのでログがリクエスト単位になる(別リクエストの割り込みログが発生しない)。

true

配列に溜め込んで終了時に書き込む。

ログの変換処理が逐次行われず、終了時に変換と書き込みを行うので、 fastcgi_finish_request があるなら(クライアントの)動作速度に一切の影響を与えない。 ただし、 長大なクエリや BLOB INSERT などもすべて蓄えるのでメモリには優しくない。 終了時にロックして書き込むのでログがリクエスト単位になる(別リクエストの割り込みログが発生しない)。

array

指定されたサイズまでは配列に溜め込んで、それ以上はバッファリングして終了時に書き込む。

上記の int と true の合わせ技(2要素の配列で指定する)。 http のときは全部配列に収まるように、 batch のときは溢れてもいいようなサイズを設定すれば共通の設定を使い回せる。 終了時にロックして書き込むのでログがリクエスト単位になる(別リクエストの割り込みログが発生しない)。

Hierarchy

Parents
type summary
AbstractLogger This is a simple Logger implementation that other Loggers can inherit from.
Implements
type summary
LoggerInterface Describes a logger instance.
Uses
type summary
DebugInfoTrait
OptionTrait オプションを保持し、get/set できるようにする trait

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override OptionTrait::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[M] simple シンプルに値の埋め込みだけを行うコールバックを返す

シンプルに値の埋め込みだけを行うコールバックを返す
public static function simple(?int $trimsize = null): \Closure
Parameter
type name summary
​?int $trimsize = null
Return
type summary
Closure

[M] pretty 値を埋め込んだ上で sql フォーマットするコールバックを返す

値を埋め込んだ上で sql フォーマットするコールバックを返す
public static function pretty(?int $trimsize = null): \Closure
Parameter
type name summary
​?int $trimsize = null
Return
type summary
Closure

[M] oneline 連続する空白をまとめて1行化するコールバックを返す

連続する空白をまとめて1行化するコールバックを返す
public static function oneline(?int $trimsize = null): \Closure
Parameter
type name summary
​?int $trimsize = null
Return
type summary
Closure

[M] json 1行 json (jsonl) のコールバックを返す

1行 json (jsonl) のコールバックを返す
public static function json(bool $bind = true): \Closure
Parameter
type name summary
​bool $bind = true
Return
type summary
Closure

[m] __construct コンストラクタ

コンストラクタ
public function __construct( mixed $destination = null, array $options = [] )
Parameter
type name summary
​mixed $destination = null 出力場所だけはほぼ必須かつ単一で与えることも多いため別引数で与えられる
​array $options = [] オプション

[m] __destruct デストラクタのデフォルト実装

デストラクタのデフォルト実装
public function __destruct()

デストラクタはコンストラクタに比べてそれほど実装されないので trait 側で定義してしまって良いと判断。 use 側でデストラクタを定義したい場合は OptionTrait__destruct を呼ぶようにすること。

Prototype
kind source summary
​override OptionTrait::__destruct() デストラクタのデフォルト実装

[m] log Logs with an arbitrary level.

Logs with an arbitrary level.
public function log( mixed $level, \Stringable|string $message, array|mixed[] $context = [] )
Parameter
type name summary
​mixed $level
Stringable|​string $message
​array|​mixed[] $context = []
Throws
type summary
InvalidArgumentException
Prototype
kind source summary
​implement LoggerInterface::log() Logs with an arbitrary level.

[m] emergency System is unusable.

System is unusable.
public function emergency( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::emergency() System is unusable.

[m] alert Action must be taken immediately.

Action must be taken immediately.
public function alert( \Stringable|string $message, array $context = [] )

Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::alert() Action must be taken immediately.

[m] critical Critical conditions.

Critical conditions.
public function critical( \Stringable|string $message, array $context = [] )

Example: Application component unavailable, unexpected exception.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::critical() Critical conditions.

[m] error Runtime errors that do not require immediate action but should typically

Runtime errors that do not require immediate action but should typically
public function error( \Stringable|string $message, array $context = [] )

be logged and monitored.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::error() Runtime errors that do not require immediate action but should typically

[m] warning Exceptional occurrences that are not errors.

Exceptional occurrences that are not errors.
public function warning( \Stringable|string $message, array $context = [] )

Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::warning() Exceptional occurrences that are not errors.

[m] notice Normal but significant events.

Normal but significant events.
public function notice( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::notice() Normal but significant events.

[m] info Interesting events.

Interesting events.
public function info( \Stringable|string $message, array $context = [] )

Example: User logs in, SQL logs.

Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::info() Interesting events.

[m] debug Detailed debug information.

Detailed debug information.
public function debug( \Stringable|string $message, array $context = [] )
Parameter
type name summary
Stringable|​string $message
​array $context = []
Prototype
kind source summary
​inherit AbstractLogger::debug() Detailed debug information.

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​instead OptionTrait::checkUnknownOption()

[C] Connection

Hierarchy

Parents
type summary
AbstractConnectionMiddleware
Implements
type summary
Connection Connection interface.
ServerInfoAwareConnection Contract for a connection that is able to provide information about the server it is connected to.

[m] __construct

public function __construct( Doctrine\DBAL\Driver\Connection $connection, Psr\Log\LoggerInterface $logger )
Parameter
type name summary
Connection $connection
LoggerInterface $logger
Prototype
kind source summary
​override AbstractConnectionMiddleware::__construct()

[m] __destruct

public function __destruct()

[m] prepare Prepares a statement for execution and returns a Statement object.

Prepares a statement for execution and returns a Statement object.
public function prepare( string $sql, $params = [], $types = [] ): Doctrine\DBAL\Driver\Statement
Parameter
type name summary
​string $sql
$params = []
$types = []
Return
type summary
Statement
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::prepare() Prepares a statement for execution and returns a Statement object.

[m] query Executes an SQL statement, returning a result set as a Statement object.

Executes an SQL statement, returning a result set as a Statement object.
public function query(string $sql): Doctrine\DBAL\Driver\Result
Parameter
type name summary
​string $sql
Return
type summary
Result
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::query() Executes an SQL statement, returning a result set as a Statement object.

[m] exec Executes an SQL statement and return the number of affected rows.

Executes an SQL statement and return the number of affected rows.
public function exec(string $sql): int
Parameter
type name summary
​string $sql
Return
type summary
​int
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::exec() Executes an SQL statement and return the number of affected rows.

[m] beginTransaction Initiates a transaction.

Initiates a transaction.
public function beginTransaction(): bool
Return
type summary
​bool TRUE on success or FALSE on failure.
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::beginTransaction() Initiates a transaction.

[m] commit Commits a transaction.

Commits a transaction.
public function commit(): bool
Return
type summary
​bool TRUE on success or FALSE on failure.
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::commit() Commits a transaction.

[m] rollBack Rolls back the current transaction, as initiated by beginTransaction().

Rolls back the current transaction, as initiated by beginTransaction().
public function rollBack(): bool
Return
type summary
​bool TRUE on success or FALSE on failure.
Throws
type summary
Exception
Prototype
kind source summary
​implement Connection::rollBack() Rolls back the current transaction, as initiated by beginTransaction().

[m] quote <tag_inheritdoc data-type='' data-description=''>Quotes a string for use in a query.

Quotes a string for use in a query.
public function quote( mixed $value, int $type = Doctrine\DBAL\ParameterType::STRING ): mixed

The usage of this method is discouraged. Use prepared statements or AbstractPlatform::quoteStringLiteral() instead.

Parameter
type name summary
​mixed $value
​int $type = Doctrine\DBAL\ParameterType::STRING
Return
type summary
​mixed
Prototype
kind source summary
​inherit AbstractConnectionMiddleware::quote() <tag_inheritdoc data-type='' data-description=''>Quotes a string for use in a query.
See
type summary
AbstractPlatform::quoteStringLiteral()

[m] lastInsertId Returns the ID of the last inserted row or sequence value.

Returns the ID of the last inserted row or sequence value.
public function lastInsertId(string|null $name = null): string|int|false
Parameter
type name summary
​string|​null $name = null
Return
type summary
​string|​int|​false
Throws
type summary
Exception
Prototype
kind source summary
​inherit AbstractConnectionMiddleware::lastInsertId() Returns the ID of the last inserted row or sequence value.

[m] getServerVersion Returns information about the version of the database server connected to.

Returns information about the version of the database server connected to.
public function getServerVersion(): string
Return
type summary
​string
Throws
type summary
Exception
Prototype
kind source summary
​inherit AbstractConnectionMiddleware::getServerVersion() Returns information about the version of the database server connected to.

[m] getNativeConnection

public function getNativeConnection(): resource|object
Return
type summary
​resource|​object
Prototype
kind source summary
​inherit AbstractConnectionMiddleware::getNativeConnection()

[C] Driver

Hierarchy

Parents
type summary
AbstractDriverMiddleware
Implements
type summary
Driver Driver interface.
VersionAwarePlatformDriver Contract for a driver that is able to create platform instances by version.

[m] __construct

public function __construct( Doctrine\DBAL\Driver $driver, Psr\Log\LoggerInterface $logger )
Parameter
type name summary
Driver $driver
LoggerInterface $logger
Prototype
kind source summary
​override AbstractDriverMiddleware::__construct()

[m] connect Attempts to create a connection with the database.

Attempts to create a connection with the database.
public function connect(array $params): Doctrine\DBAL\Driver\Connection
Parameter
type name summary
array
$params
Return
type summary
Connection
Throws
type summary
Exception
Prototype
kind source summary
​implement Driver::connect() Attempts to create a connection with the database.

[m] getDatabasePlatform <tag_inheritdoc data-type='' data-description=''>Gets the DatabasePlatform instance that provides all the metadata about

Gets the DatabasePlatform instance that provides all the metadata about
public function getDatabasePlatform(): Doctrine\DBAL\Platforms\AbstractPlatform

the platform this driver connects to.

Return
type summary
AbstractPlatform The database platform.
Prototype
kind source summary
​inherit AbstractDriverMiddleware::getDatabasePlatform() <tag_inheritdoc data-type='' data-description=''>Gets the DatabasePlatform instance that provides all the metadata about

[m] getSchemaManager <tag_inheritdoc data-type='' data-description=''>Gets the SchemaManager that can be used to inspect and change the underlying

Gets the SchemaManager that can be used to inspect and change the underlying
public function getSchemaManager( Doctrine\DBAL\Connection $conn, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): Doctrine\DBAL\Schema\AbstractSchemaManager

database schema of the platform this driver connects to.

Parameter
type name summary
Connection $conn
AbstractPlatform $platform
Return
type summary
AbstractSchemaManager
Prototype
kind source summary
​inherit AbstractDriverMiddleware::getSchemaManager() <tag_inheritdoc data-type='' data-description=''>Gets the SchemaManager that can be used to inspect and change the underlying

[m] getExceptionConverter Gets the ExceptionConverter that can be used to convert driver-level exceptions into DBAL exceptions.

Gets the ExceptionConverter that can be used to convert driver-level exceptions into DBAL exceptions.
public function getExceptionConverter(): Doctrine\DBAL\Driver\API\ExceptionConverter
Return
type summary
ExceptionConverter
Prototype
kind source summary
​inherit AbstractDriverMiddleware::getExceptionConverter() Gets the ExceptionConverter that can be used to convert driver-level exceptions into DBAL exceptions.

[m] createDatabasePlatformForVersion Factory method for creating the appropriate platform instance for the given version.

Factory method for creating the appropriate platform instance for the given version.
public function createDatabasePlatformForVersion(string $version): Doctrine\DBAL\Platforms\AbstractPlatform
Parameter
type name summary
​string $version The platform/server version string to evaluate. This should be given in the notation
Return
type summary
AbstractPlatform
Throws
type summary
Exception If the given version string could not be evaluated.
Prototype
kind source summary
​inherit AbstractDriverMiddleware::createDatabasePlatformForVersion() Factory method for creating the appropriate platform instance for the given version.

[C] Statement

Hierarchy

Parents
type summary
AbstractStatementMiddleware
Implements
type summary
Statement Driver-level statement

[m] __construct

public function __construct( Doctrine\DBAL\Driver\Statement $statement, Psr\Log\LoggerInterface $logger, string $sql )
Parameter
type name summary
Statement $statement
LoggerInterface $logger
​string $sql
Prototype
kind source summary
​override AbstractStatementMiddleware::__construct()

[m] bindValue Binds a value to a corresponding named (not supported by mysqli driver, see comment below) or positional

Binds a value to a corresponding named (not supported by mysqli driver, see comment below) or positional
public function bindValue( string|int $param, mixed $value, int $type = Doctrine\DBAL\ParameterType::STRING ): bool

placeholder in the SQL statement that was used to prepare the statement.

As mentioned above, the named parameters are not natively supported by the mysqli driver, use executeQuery(), fetchAll(), fetchArray(), fetchColumn(), fetchAssoc() methods to have the named parameter emulated by doctrine.

Parameter
type name summary
​string|​int $param Parameter identifier. For a prepared statement using named placeholders,
​mixed $value The value to bind to the parameter.
​int $type = Doctrine\DBAL\ParameterType::STRING Explicit data type for the parameter using the Doctrine\DBAL\ParameterType
Return
type summary
​bool TRUE on success or FALSE on failure.
Throws
type summary
Exception
Prototype
kind source summary
​implement Statement::bindValue() Binds a value to a corresponding named (not supported by mysqli driver, see comment below) or positional
See
type summary
ParameterType

[m] execute Executes a prepared statement

Executes a prepared statement
public function execute(mixed[]|null $params = null): Doctrine\DBAL\Driver\Result

If the prepared statement included parameter markers, you must either: call Doctrine\DBAL\Driver\Statement::bindParam() to bind PHP variables to the parameter markers: bound variables pass their value as input and receive the output value, if any, of their associated parameter markers or pass an array of input-only parameter values.

Parameter
type name summary
​mixed[]|​null $params = null A numeric array of values with as many elements as there are
Return
type summary
Result
Throws
type summary
Exception
Prototype
kind source summary
​implement Statement::execute() Executes a prepared statement
See
type summary
Statement::bindParam()

[m] bindParam <tag_inheritdoc data-type='' data-description=''>Binds a PHP variable to a corresponding named (not supported by mysqli driver, see comment below) or question

Binds a PHP variable to a corresponding named (not supported by mysqli driver, see comment below) or question
public function bindParam( string|int $param, mixed &$variable, int $type = Doctrine\DBAL\ParameterType::STRING, int|null $length = null ): bool

mark placeholder in the SQL statement that was use to prepare the statement. Unlike Doctrine\DBAL\Driver\Statement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement->execute() is called.

As mentioned above, the named parameters are not natively supported by the mysqli driver, use executeQuery(), fetchAll(), fetchArray(), fetchColumn(), fetchAssoc() methods to have the named parameter emulated by doctrine.

Most parameters are input parameters, that is, parameters that are used in a read-only fashion to build up the query. Some drivers support the invocation of stored procedures that return data as output parameters, and some also as input/output parameters that both send in data and are updated to receive it.

Parameter
type name summary
​string|​int $param Parameter identifier. For a prepared statement using named placeholders,
​mixed &$variable Name of the PHP variable to bind to the SQL statement parameter.
​int $type = Doctrine\DBAL\ParameterType::STRING Explicit data type for the parameter using the Doctrine\DBAL\ParameterType
​int|​null $length = null You must specify maxlength when using an OUT bind
Return
type summary
​bool TRUE on success or FALSE on failure.
Throws
type summary
Exception
Prototype
kind source summary
​inherit AbstractStatementMiddleware::bindParam() <tag_inheritdoc data-type='' data-description=''>Binds a PHP variable to a corresponding named (not supported by mysqli driver, see comment below) or question

[N] ryunosuke\dbml\Metadata\

[C] CompatibleConnection RDBMS 特有の処理を記述するクラス

RDBMS 特有の処理を記述するクラス

ライブラリ内部で $native instanceof したくないのでそういうのはこのクラスが吸収する。 あと sqlite だけでできるだけカバレッジを埋めたい裏事情もある。

Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait

[P] $storage

protected static \WeakMap $storage

Type: WeakMap

[p] $connection

protected Doctrine\DBAL\Connection $connection

Type: Connection

[p] $driverConnection

protected Doctrine\DBAL\Driver\Connection $driverConnection

Type: Connection

[p] $nativeConnection

protected resource|\PDO|\SQLite3|\mysqli|\PgSql\Connection $nativeConnection = null

Type: resource|​PDO|​SQLite3|​mysqli|​Connection

[m] __construct

public function __construct(Doctrine\DBAL\Connection $connection)
Parameter
type name summary
Connection $connection

[m] getConnection

public function getConnection(): Doctrine\DBAL\Connection
Return
type summary
Connection

[m] getName

public function getName(): string
Return
type summary
​string

[m] isSupportedNamedPlaceholder

public function isSupportedNamedPlaceholder(): bool
Return
type summary
​bool

[m] isEmulationMode

public function isEmulationMode(): bool
Return
type summary
​bool

[m] isTransactionActive

public function isTransactionActive(): ?bool
Return
type summary
​?bool

[m] getSupportedMetadata

public function getSupportedMetadata(): array
Return
type summary
​array

[m] tryPDOAttribute

public function tryPDOAttribute( $attribute_name, $attribute_value )
Parameter
type name summary
$attribute_name
$attribute_value

[m] setBufferMode

public function setBufferMode(bool $mode)
Parameter
type name summary
​bool $mode

[m] customResult

public function customResult( Doctrine\DBAL\Result $result, ?string $checkSameColumn ): Doctrine\DBAL\Result
Parameter
type name summary
Result $result
​?string $checkSameColumn
Return
type summary
Result

[m] getMetadata

public function getMetadata(Doctrine\DBAL\Result $result): array
Parameter
type name summary
Result $result
Return
type summary
​array

[m] alternateMatchedRows

public function alternateMatchedRows(): ?int
Return
type summary
​?int

[m] executeAsync

public function executeAsync( $sqls, $converter, $affected )
Parameter
type name summary
$sqls
$converter
$affected

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[C] CompatiblePlatform 各 Platform では賄いきれない RDBMS の差異を吸収するクラス

各 Platform では賄いきれない RDBMS の差異を吸収するクラス

ライブラリ内部で $platform instanceof したくないのでそういうのはこのクラスが吸収する。 あと sqlite だけでできるだけカバレッジを埋めたい裏事情もある。 (コイツのテストは接続を必要としないのであらゆる環境でカバーできるため)。

本当は AbstractPlatform を継承したいんだけどそれだと本家の変更を自動追従できないのでコンポジットパターンになっている。

Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait

[p] $platform

protected Doctrine\DBAL\Platforms\AbstractPlatform $platform

Type: AbstractPlatform

[p] $version

protected ?string $version

Type: ?string

[m] __construct コンストラクタ

コンストラクタ
public function __construct( Doctrine\DBAL\Platforms\AbstractPlatform $platform, ?string $version = null )
Parameter
type name summary
AbstractPlatform $platform
​?string $version = null

[m] getWrappedPlatform 元 platform を取得する

元 platform を取得する
public function getWrappedPlatform(): Doctrine\DBAL\Platforms\AbstractPlatform
Return
type summary
AbstractPlatform

[m] getVersion バージョン文字列を取得する

バージョン文字列を取得する
public function getVersion(): ?string
Return
type summary
​?string

[m] getName platform 名を取得する

platform 名を取得する
public function getName(): string
Return
type summary
​string

[m] supportsIdentityNullable AUTO_INCREMENT な列に null を与えると自動採番が働くかどうか

AUTO_INCREMENT な列に null を与えると自動採番が働くかどうか
public function supportsIdentityNullable(): bool
Return
type summary
​bool

[m] supportsIdentityUpdate AUTO_INCREMENT な列を明示指定して UPDATE できるか否かを返す

AUTO_INCREMENT な列を明示指定して UPDATE できるか否かを返す
public function supportsIdentityUpdate(): bool
Return
type summary
​bool

[m] supportsIdentityAutoUpdate AUTO_INCREMENT な列を明示指定したあと、自動でシーケンスが更新されるか否かを返す

AUTO_INCREMENT な列を明示指定したあと、自動でシーケンスが更新されるか否かを返す
public function supportsIdentityAutoUpdate(): bool
Return
type summary
​bool

[m] supportsInsertSet INSERT SET 拡張構文が使えるか否かを返す

INSERT SET 拡張構文が使えるか否かを返す
public function supportsInsertSet(): bool
Return
type summary
​bool

[m] supportsReplace REPLACE が使えるか否かを返す

REPLACE が使えるか否かを返す
public function supportsReplace(): bool
Return
type summary
​bool

[m] supportsMerge MERGE が使えるか否かを返す

MERGE が使えるか否かを返す
public function supportsMerge(): bool
Return
type summary
​bool

[m] supportsBulkMerge BULK MERGE が使えるか否かを返す

BULK MERGE が使えるか否かを返す
public function supportsBulkMerge(): bool
Return
type summary
​bool

[m] supportsIgnore IGNORE が使えるか否かを返す

IGNORE が使えるか否かを返す
public function supportsIgnore(): bool
Return
type summary
​bool

[m] supportsUpdateLimit UPDATE + ORDER BY,LIMIT をサポートするか否かを返す

UPDATE + ORDER BY,LIMIT をサポートするか否かを返す
public function supportsUpdateLimit(): bool
Return
type summary
​bool

[m] supportsDeleteLimit DELETE + ORDER BY,LIMIT をサポートするか否かを返す

DELETE + ORDER BY,LIMIT をサポートするか否かを返す
public function supportsDeleteLimit(): bool
Return
type summary
​bool

[m] supportsUnionParentheses UNION が括弧をサポートするか否かを返す

UNION が括弧をサポートするか否かを返す
public function supportsUnionParentheses(): bool
Return
type summary
​bool

[m] supportsResetAutoIncrementOnTruncate TRUNCATE 文で自動採番列がリセットされるか否かを返す

TRUNCATE 文で自動採番列がリセットされるか否かを返す
public function supportsResetAutoIncrementOnTruncate(): bool
Return
type summary
​bool

[m] supportsRowConstructor 行値式が有効か否かを返す

行値式が有効か否かを返す
public function supportsRowConstructor(): bool
Return
type summary
​bool

[m] supportsCompatibleCharAndBinary char と binary に互換性があるかを返す

char と binary に互換性があるかを返す
public function supportsCompatibleCharAndBinary(): bool
Return
type summary
​bool

[m] supportsRedundantOrderBy id asc,id desc のような冗長な ORDER BY を許すか

id asc,id desc のような冗長な ORDER BY を許すか
public function supportsRedundantOrderBy(): bool
Return
type summary
​bool

[m] quoteIdentifierIfNeeded 必要に応じて識別子をエスケープする

必要に応じて識別子をエスケープする
public function quoteIdentifierIfNeeded(string $word): string
Parameter
type name summary
​string $word
Return
type summary
​string

[m] escapeLike LIKE エスケープする

LIKE エスケープする
public function escapeLike( ryunosuke\dbml\Query\Queryable|string $word, string $escaper = "\\" ): string
Parameter
type name summary
Queryable|​string $word
​string $escaper = "\\"
Return
type summary
​string

[m] truncateString 文字列を指定長で切る

文字列を指定長で切る
public function truncateString( string $string, Doctrine\DBAL\Schema\Column $column ): string
Parameter
type name summary
​string $string
Column $column
Return
type summary
​string

[m] getMergeSyntax MERGE 構文を返す

MERGE 構文を返す
public function getMergeSyntax(array $columns): ?string
Parameter
type name summary
​array $columns
Return
type summary
​?string

[m] getReferenceSyntax 参照構文(mysql における VALUES)を返す

参照構文(mysql における VALUES)を返す
public function getReferenceSyntax(string $column): ?string
Parameter
type name summary
​string $column
Return
type summary
​?string

[m] getInsertSelectSyntax INSERT で使う SELECT を返す

INSERT で使う SELECT を返す
public function getInsertSelectSyntax( array $column, string $condition ): string
Parameter
type name summary
​array $column
​string $condition
Return
type summary
​string

[m] getIdentityInsertSQL 自動採番を使うか切り替えるための SQL を返す

自動採番を使うか切り替えるための SQL を返す
public function getIdentityInsertSQL( string $tableName, bool $onoffflag ): string
Parameter
type name summary
​string $tableName
​bool $onoffflag
Return
type summary
​string

[m] getTruncateTableSQL TRUNCATE 文を返す

TRUNCATE 文を返す
public function getTruncateTableSQL( string $tableName, bool $cascade = false ): string
Parameter
type name summary
​string $tableName
​bool $cascade = false
Return
type summary
​string

[m] getIdentitySequenceName ID シーケンス名を返す

ID シーケンス名を返す
public function getIdentitySequenceName( ?string $tableName, ?string $columnName ): ?string
Parameter
type name summary
​?string $tableName
​?string $columnName
Return
type summary
​?string

[m] getIndexHintSQL インデックスヒント構文を返す

インデックスヒント構文を返す
public function getIndexHintSQL( array|string $index_name, string $mode = "FORCE" ): string
Parameter
type name summary
​array|​string $index_name
​string $mode = "FORCE"
Return
type summary
​string

[m] appendLockSuffix クエリにロック構文を付加して返す

クエリにロック構文を付加して返す
public function appendLockSuffix( string $query, Doctrine\DBAL\LockMode|int $lockmode, string $lockoption ): string
Parameter
type name summary
​string $query
LockMode|​int $lockmode
​string $lockoption
Return
type summary
​string

[m] getPrimaryCondition 条件配列を結合した Expression を返す

条件配列を結合した Expression を返す
public function getPrimaryCondition( array $wheres, string $prefix = "" ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​array $wheres
​string $prefix = ""
Return
type summary
Expression

[m] getGroupConcatSyntax GROUP_CONCAT 構文を返す

GROUP_CONCAT 構文を返す
public function getGroupConcatSyntax( array|string $expr, ?string $separator = null, string|array|null $order = null ): string
Parameter
type name summary
​array|​string $expr 結合式
​?string $separator = null セパレータ文字
​string|​array|​null $order = null 句。これが活きるのは mysql のみ
Return
type summary
​string GROUP_CONCAT 構文

[m] getSpaceshipSyntax null 許容演算子(<=>)構文を返す

null 許容演算子(<=>)構文を返す
public function getSpaceshipSyntax(string $column): string

$column はカラム名を想定しており、エスケープされないので注意すること。

Parameter
type name summary
​string $column
Return
type summary
​string

[m] getWithRecursiveSyntax 再帰 WITH 句を返す

再帰 WITH 句を返す
public function getWithRecursiveSyntax(): string
Return
type summary
​string

[m] getCountExpression count 表現を返す

count 表現を返す
public function getCountExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
Return
type summary
Expression

[m] getMinExpression min 表現を返す

min 表現を返す
public function getMinExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
Return
type summary
Expression

[m] getMaxExpression max 表現を返す

max 表現を返す
public function getMaxExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
Return
type summary
Expression

[m] getSumExpression sum 表現を返す

sum 表現を返す
public function getSumExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
Return
type summary
Expression

[m] getAvgExpression avg 表現を返す

avg 表現を返す
public function getAvgExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
Return
type summary
Expression

[m] getJsonObjectExpression JSON 表現を返す

JSON 表現を返す
public function getJsonObjectExpression(array $keyvalues): ryunosuke\dbml\Query\Expression\Expression

大抵の RDBMS は (key1, value1, key2, value2) のような構文になっており、php レイヤーで使うのに少々不便。 このメソッドを使えば (key1 => value1, key2 => value) 形式でオブジェクト化できる。

Parameter
type name summary
​array $keyvalues
Return
type summary
Expression

[m] getJsonAggExpression JSON 集約表現を返す

JSON 集約表現を返す
public function getJsonAggExpression( array $keyvalues, $key = null ): ryunosuke\dbml\Query\Expression\Expression

$key を指定すると配列ではなくオブジェクトになる。

Parameter
type name summary
​array $keyvalues
$key = null
Return
type summary
Expression

[m] getConcatExpression 文字列結合句を返す

文字列結合句を返す
public function getConcatExpression(ryunosuke\dbml\Query\Queryable|string ...$args): ryunosuke\dbml\Query\Queryable
Parameter
type name summary
Queryable|​string ...$args
Return
type summary
Queryable

[m] getRegexpExpression 正規表現を返す

正規表現を返す
public function getRegexpExpression( string $column, string $pattern ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $column
​string $pattern
Return
type summary
Expression

[m] getBinaryExpression binary 表現を返す

binary 表現を返す
public function getBinaryExpression(string $data): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​string $data
Return
type summary
Expression

[m] getNowExpression now 表現を返す

now 表現を返す
public function getNowExpression(int $precision = 0): ryunosuke\dbml\Query\Expression\Expression

dbal では非推奨だがたまに使うことがある。 ローカルタイム限定で形式も Y-m-d H:i:s.v のみ。

Parameter
type name summary
​int $precision = 0
Return
type summary
Expression

[m] getSleepExpression sleep 表現を返す

sleep 表現を返す
public function getSleepExpression(float $second): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​float $second
Return
type summary
Expression

[m] getRandomExpression random 表現([0~1.0))を返す

random 表現([0~1.0))を返す
public function getRandomExpression(?int $seed): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​?int $seed
Return
type summary
Expression

[m] getResetSequenceExpression AUTO_INCREMENT のセット構文を返す

AUTO_INCREMENT のセット構文を返す
public function getResetSequenceExpression( string $tableName, string $columnName, int $seq ): array
Parameter
type name summary
​string $tableName
​string $columnName
​int $seq
Return
type summary
​array

[m] getSwitchForeignKeyExpression 外部キー有効無効切替構文を返す

外部キー有効無効切替構文を返す
public function getSwitchForeignKeyExpression( bool $enabled, ?string $table_name = null, ?string $fkname = null ): array
Parameter
type name summary
​bool $enabled
​?string $table_name = null
​?string $fkname = null
Return
type summary
​array

[m] getIgnoreSyntax IGNORE 構文を返す

IGNORE 構文を返す
public function getIgnoreSyntax(): string
Return
type summary
​string

[m] commentize 与えられた文をコメント化する

与えられた文をコメント化する
public function commentize( string $comment, bool $cstyle = false ): string
Parameter
type name summary
​string $comment
​bool $cstyle = false
Return
type summary
​string

[m] convertMergeData 挿入データと更新データで更新用カラム列を生成する

挿入データと更新データで更新用カラム列を生成する
public function convertMergeData( array $insertData, array $updateData ): array
Parameter
type name summary
​array $insertData
​array $updateData
Return
type summary
​array

[m] convertSelectExistsQuery EXISTS 構文を SELECT で使用できるようにする

EXISTS 構文を SELECT で使用できるようにする
public function convertSelectExistsQuery(ryunosuke\dbml\Query\Queryable|string $exists): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
Queryable|​string $exists
Return
type summary
Expression

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[C] Schema スキーマ情報の収集と保持とキャッシュを行うクラス

スキーマ情報の収集と保持とキャッシュを行うクラス

キャッシュ

カラム情報や主キー情報の取得のためにスキーマ情報を結構な勢いで漁る。 しかし、基本的にはスキーマ情報は自動でキャッシュするので意識はしなくて OK。

VIEW

VIEW は TABLE と同等の存在として扱う。つまり getTableNames メソッドの返り値には VIEW も含まれる。 VIEW は 外部キーやインデックスこそ張れないが、 SELECT 系なら TABLE と同様の操作ができる。 更新可能 VIEW ならおそらく更新も可能である。

メタ情報

setTableColumn でスキーマの型やメタ情報を変更・追加することが出来る。 設定されているスキーマ・メタ情報は getTableColumnMetadata メソッドで取得することができる。

[C] COLUMN_UPDATABLE

public const int COLUMN_UPDATABLE = 4

[C] COLUMN_REAL

public const int COLUMN_REAL = 8

[m] __construct コンストラクタ

コンストラクタ
public function __construct( Doctrine\DBAL\Schema\AbstractSchemaManager $schemaManger, array $listeners, Psr\SimpleCache\CacheInterface $cache )
Parameter
type name summary
AbstractSchemaManager $schemaManger
​array $listeners
CacheInterface $cache

[m] refresh 一切のメタデータを削除する

一切のメタデータを削除する
public function refresh()

[m] setViewSource ビューオブジェクトのデータソースを設定する

ビューオブジェクトのデータソースを設定する
public function setViewSource(array $viewSource)
Parameter
type name summary
​array $viewSource

[m] addTable テーブルオブジェクトをメタデータに追加する

テーブルオブジェクトをメタデータに追加する
public function addTable(Doctrine\DBAL\Schema\Table $table)
Parameter
type name summary
Table $table

[m] setTableColumn テーブルのカラムを変更する

テーブルのカラムを変更する
public function setTableColumn( string $table_name, string $column_name, $definitation )

存在しないカラムも指定できる。 その場合、普通に追加されるので仮想カラムとして扱うことができる。

null を渡すとカラムが削除される。

Parameter
type name summary
​string $table_name
​string $column_name
$definitation

[m] setForeignKeyMetadata 外部キーのメタデータを設定する

外部キーのメタデータを設定する
public function setForeignKeyMetadata( Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey, array $metadata )

メタデータと言いつつも単に配列を紐づけるだけに過ぎない。 仮に dbal の方で setOption メソッドが実装されたら不要となる。

原則的に好きに使ってよいが dbal 組み込みと joinable キーは「外部キー結合に使われるか?」の内部判定で使用されるので留意。

Parameter
type name summary
ForeignKeyConstraint|​string $fkey
​array $metadata

[m] hasTable テーブルが存在するなら true を返す

テーブルが存在するなら true を返す
public function hasTable(string $table_name): bool
Parameter
type name summary
​string $table_name
Return
type summary
​bool

[m] getTableNames テーブル名一覧を取得する

テーブル名一覧を取得する
public function getTableNames(): array
Return
type summary
​array

[m] getTable テーブルオブジェクトを取得する

テーブルオブジェクトを取得する
public function getTable(string $table_name): Doctrine\DBAL\Schema\Table
Parameter
type name summary
​string $table_name
Return
type summary
Table

[m] getTables パターン一致したテーブルオブジェクトを取得する

パターン一致したテーブルオブジェクトを取得する
public function getTables(array|string $table_pattern = []): array|Doctrine\DBAL\Schema\Table[]
Parameter
type name summary
​array|​string $table_pattern = []
Return
type summary
​array|​Table[] テーブルオブジェクト配列

[m] getTableColumns テーブルのカラムオブジェクトを取得する

テーブルのカラムオブジェクトを取得する
public function getTableColumns( string $table_name, callable|int|null $filter = null ): array|Doctrine\DBAL\Schema\Column[]
Parameter
type name summary
​string $table_name
​callable|​int|​null $filter = null
Return
type summary
​array|​Column[] テーブルのカラムオブジェクト配列

[m] getTableColumnExpression テーブルカラムの表現を返す

テーブルカラムの表現を返す
public function getTableColumnExpression( string $table_name, string $column_name, string $type, ...$args )
Parameter
type name summary
​string $table_name
​string $column_name
​string $type
...$args

[m] getTablePrimaryKey テーブルの主キーインデックスオブジェクトを取得する

テーブルの主キーインデックスオブジェクトを取得する
public function getTablePrimaryKey(string $table_name): ?Doctrine\DBAL\Schema\Index
Parameter
type name summary
​string $table_name
Return
type summary
​?Index

[m] getTablePrimaryColumns テーブルの主キーカラムオブジェクトを取得する

テーブルの主キーカラムオブジェクトを取得する
public function getTablePrimaryColumns(string $table_name): array|Doctrine\DBAL\Schema\Column[]
Parameter
type name summary
​string $table_name
Return
type summary
​array|​Column[] 主キーカラムオブジェクト配列

[m] getTableUniqueColumns テーブルの(主キーを除く)ユニークキーカラムオブジェクトを取得する

テーブルの(主キーを除く)ユニークキーカラムオブジェクトを取得する
public function getTableUniqueColumns( string $table_name, string $ukname = "" ): array|Doctrine\DBAL\Schema\Column[]
Parameter
type name summary
​string $table_name
​string $ukname = ""
Return
type summary
​array|​Column[] ユニークキーカラムオブジェクト配列

[m] getTableAutoIncrement テーブルのオートインクリメントカラムを取得する

テーブルのオートインクリメントカラムを取得する
public function getTableAutoIncrement(string $table_name): ?Doctrine\DBAL\Schema\Column
Parameter
type name summary
​string $table_name
Return
type summary
​?Column

[m] getTableForeignKeys テーブルの外部キーオブジェクトを取得する

テーブルの外部キーオブジェクトを取得する
public function getTableForeignKeys(string $table_name): array|Doctrine\DBAL\Schema\ForeignKeyConstraint[]
Parameter
type name summary
​string $table_name
Return
type summary
​array|​ForeignKeyConstraint[] テーブルの外部キーオブジェクト配列

[m] getForeignKeys テーブル間外部キーオブジェクトを取得する

テーブル間外部キーオブジェクトを取得する
public function getForeignKeys( ?string $to_table = null, ?string $from_table = null ): array|Doctrine\DBAL\Schema\ForeignKeyConstraint[]

端的に言えば $from_table から $to_table へ向かう外部キーを取得する。ただし

  • $from_table の指定がない場合は $to_table へ向かう全ての外部キー
  • $to_table の指定もない場合は データベース上に存在する全ての外部キー

を取得する。

Parameter
type name summary
​?string $to_table = null
​?string $from_table = null
Return
type summary
​array|​ForeignKeyConstraint[] 外部キーオブジェクト配列

[m] getForeignTable 外部キーから関連テーブルを取得する

外部キーから関連テーブルを取得する
public function getForeignTable(Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey): array
Parameter
type name summary
ForeignKeyConstraint|​string $fkey
Return
type summary
​array [fromTable => $toTable] の配列

[m] getForeignColumns テーブル間を結ぶ外部キーカラムを取得する

テーブル間を結ぶ外部キーカラムを取得する
public function getForeignColumns( string $table_name1, string $table_name2, ?string &$fkeyname = null, ?bool &$direction = null ): array

$fkeyname 未指定時は唯一の外部キー(複数ある場合は例外)。確定した外部キーオブジェクトが格納される。 $direction キー($table_name1 -> $table_name2 なら true)の方向が格納される

Parameter
type name summary
​string $table_name1
​string $table_name2
​?string &$fkeyname = null
​?bool &$direction = null
Return
type summary
​array

[m] addForeignKeyLazy テーブルに外部キーを追加する

テーブルに外部キーを追加する
public function addForeignKeyLazy( string $localTable, string $foreignTable, array|string $fkdata, ?string $fkname = null ): string

このメソッドで追加された外部キーはできるだけ遅延して追加され、必要になるまでは実行されない。

Parameter
type name summary
​string $localTable
​string $foreignTable
​array|​string $fkdata
​?string $fkname = null
Return
type summary
​string

[m] addForeignKey テーブルに外部キーを追加する

テーブルに外部キーを追加する
public function addForeignKey( Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey, ?string $lTable = null ): Doctrine\DBAL\Schema\ForeignKeyConstraint

このメソッドで追加された外部キーはデータベースに反映されるわけでもないし、キャッシュにも乗らない。 あくまで「アプリ的にちょっとリレーションが欲しい」といったときに使用する想定。

Parameter
type name summary
ForeignKeyConstraint $fkey
​?string $lTable = null
Return
type summary
ForeignKeyConstraint

[m] ignoreForeignKey テーブルの外部キーを削除する

テーブルの外部キーを削除する
public function ignoreForeignKey( Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey, ?string $lTable = null ): Doctrine\DBAL\Schema\ForeignKeyConstraint

このメソッドで削除された外部キーはデータベースに反映されるわけでもないし、キャッシュにも乗らない。 あくまで「アプリ的にちょっとリレーションを外したい」といったときに使用する想定。

Parameter
type name summary
ForeignKeyConstraint|​string $fkey
​?string $lTable = null
Return
type summary
ForeignKeyConstraint

[m] getRelation 外部キーから [table => [columnA => [table => [column => FK]]]] な配列を生成する

外部キーから [table => [columnA => [table => [column => FK]]]] な配列を生成する
public function getRelation(): array

外部キーがループしてると導出が困難なため、木構造ではなく単純なフラット配列にしてある。 (自身へアクセスすれば木構造的に辿ることは可能)。

Return
type summary
​array [table => [columnA => [table => [column => FK]]]]

[m] getIndirectlyColumns 中間テーブルを介さずに結合できるカラムを返す

中間テーブルを介さずに結合できるカラムを返す
public function getIndirectlyColumns( string $to_table, string $from_table, ?Doctrine\DBAL\Schema\ForeignKeyConstraint &$fkey = null ): array

$fkey 確定した外部キーが格納される。

Parameter
type name summary
​string $to_table
​string $from_table
​?ForeignKeyConstraint &$fkey = null
Return
type summary
​array [lcolmun => fcolumn]

[m] followColumnName 外部キーを辿って「テーブルA.カラムX」から「テーブルB.カラムY」を導出

外部キーを辿って「テーブルA.カラムX」から「テーブルB.カラムY」を導出
public function followColumnName( string $to_table, string $from_table, string $from_column ): array

返り値のキーには辿ったパス(テーブル)が / 区切りで格納される。

Parameter
type name summary
​string $to_table
​string $from_table
​string $from_column
Return
type summary
​array

[N] ryunosuke\dbml\Mixin\

[T] OptionTrait オプションを保持し、get/set できるようにする trait

オプションを保持し、get/set できるようにする trait

use する側は必ず getDefaultOptions を実装する。

このトレイトを使うと「その場限りの設定変更」が容易になる。 具体的には stack/unstackcontext を使用して一時的に設定を変更し、不要になったときに一気に戻す。 stack/unstackcontext の違いは「明示的に戻す必要があるか」である。以下に例を挙げる。

# 今だけは hoge:1 にしたい $that->stack(); $that->setOption('hoge', 1); $that->doSomething(); // この処理は hoge:1 になっている $that->unstack(); // 終わったので元に戻す # 今だけは hoge:2 にしたい $cx = $that->context(); $cx->setOption('hoge', 2); $cx->doSomething(); // この処理は hoge:2 になっている unset($cx); // 終わったので元に戻す # 今だけは hoge:3 にしたい $that->context(['hoge' => 3])->doSomething(); // この処理は hoge:3 になっている // 終わったので元に戻す…必要はない。 context 既に参照が切れており、 RAII により既に元に戻っている

stack/context の併用は出来ない(併用したときの動作は未定義)が、併用さえしなければどちらもネスト可能。 ただし、 context は自身を clone するのでループ内での使用は控えること。

Hierarchy

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array

[m] OptionTrait__callGetSet マジックメソッド __call 用メソッド

マジックメソッド __call 用メソッド
protected function OptionTrait__callGetSet( string $name, array $arguments, ?bool &$called ): mixed

OptionTrait__callGetSet('getHoge') で getOption('hoge') が起動する。 OptionTrait__callGetSet('setHoge', $value) で setOption('hoge', $value) が起動する。

マッチしてコールされたら $called に true が格納される。

Parameter
type name summary
​string $name
​array $arguments
​?bool &$called
Return
type summary
​mixed

[m] OptionTrait__callOption マジックメソッド __call 用メソッド

マジックメソッド __call 用メソッド
protected function OptionTrait__callOption( string $name, array $arguments, ?bool &$called ): mixed

OptionTrait__callOption('hoge') で getOption('hoge') が起動する。 OptionTrait__callOption('hoge', $value) で setOption('hoge', $value) が起動する。

マッチしてコールされたら $called に true が格納される

Parameter
type name summary
​string $name
​array $arguments
​?bool &$called
Return
type summary
​mixed

[m] OptionTrait__call マジックメソッド __call 用メソッド

マジックメソッド __call 用メソッド
protected function OptionTrait__call( string $name, array $arguments ): mixed

OptionTrait__callGetSet と OptionTrait__callOption を呼び出し、マッチしなければ例外を投げる。

Parameter
type name summary
​string $name
​array $arguments
Return
type summary
​mixed

[m] OptionTrait__destruct マジックメソッド __destruct 用メソッド

マジックメソッド __destruct 用メソッド
public function OptionTrait__destruct()

自身が context で生成されていたら unstack する。

[m] __destruct デストラクタのデフォルト実装

デストラクタのデフォルト実装
public function __destruct()

デストラクタはコンストラクタに比べてそれほど実装されないので trait 側で定義してしまって良いと判断。 use 側でデストラクタを定義したい場合は OptionTrait__destruct を呼ぶようにすること。

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool

[m] setDefault デフォルト値を設定する

デフォルト値を設定する
public function setDefault(array $overridden = []): ryunosuke\dbml\Mixin\OptionTrait

このメソッドでオプション項目が確定するので、これを呼ばないと何も出来ない。

Parameter
type name summary
​array $overridden = []
Return
type summary
OptionTrait

[m] getOriginal 大本のオブジェクトを返す

大本のオブジェクトを返す
public function getOriginal(): ryunosuke\dbml\Mixin\OptionTrait

ryunosuke\dbml\Mixin\OptionTrait::context() している場合に、オリジナルの $this を返す。

Return
type summary
OptionTrait

[m] context コンテキスト(一過性の自分自身)を生成して返す

コンテキスト(一過性の自分自身)を生成して返す
public function context( array $options = [], bool $shallow = false ): ryunosuke\dbml\Mixin\OptionTrait

このメソッドを呼ぶと「自身の設定と同一のインスタンス」が得られる。 そのインスタンスへの操作は自身・オリジナルに反映されるが、スコープを外れるとオリジナルの方は元に戻る。 $shallow:true にすると上記の「オリジナルに反映」は行われなくなる。 将来的にこちらの動作がデフォルトとなる(そもそもオリジナルも変更されて嬉しいことはあるか? 無くしてテストしてみても全件パスしたが…)。

// somthing が呼ばれる時点では hoge:1, fuga:2 となっている $that->context(['hoge' => 1])->setOption('fuga', 2)->somthing(); // この時点で参照が切れているので hoge, fuga の値は元に戻っている $that->somthing();
Parameter
type name summary
​array $options = []
​bool $shallow = false
Return
type summary
OptionTrait

[m] stack 現オプションをスタックに積む

現オプションをスタックに積む
public function stack(array $options = []): ryunosuke\dbml\Mixin\OptionTrait

このメソッドを呼ぶと「現時点の設定」が保存される。 その後、いかなる変更を加えても unstack を呼べば保存された「現時点の設定」へ戻すことができる。 名前の通りスタック構造なので、保存はスタッカブルに行われる。

// somthing が呼ばれる時点では hoge:1, fuga:2 となっている $that->stack(['hoge' => 1])->setOption('fuga', 2); $that->somthing(); // この時点ではまだ hoge:1, fuga:2 のままなので下記のように明示的に戻す必要がある $that->unstack(); // この時点で hoge, fuga の値は元に戻っている $that->somthing();
Parameter
type name summary
​array $options = []
Return
type summary
OptionTrait

[m] unstack ryunosuke\dbml\Mixin\OptionTrait::stack()") で積んだオプションを復元する

ryunosuke\dbml\Mixin\OptionTrait::stack() で積んだオプションを復元する
public function unstack(): ryunosuke\dbml\Mixin\OptionTrait
Return
type summary
OptionTrait

[m] unstackAll 戻せるまで ryunosuke\dbml\Mixin\OptionTrait::unstack()") する

戻せるまで ryunosuke\dbml\Mixin\OptionTrait::unstack() する
public function unstackAll(): ryunosuke\dbml\Mixin\OptionTrait
Return
type summary
OptionTrait

[m] getOptions 全オプション値を返却する

全オプション値を返却する
public function getOptions(): array
Return
type summary
​array

[m] getOption 単一のオプション値を返却する

単一のオプション値を返却する
public function getOption(string $name): mixed

オプション名が存在しない場合、例外が飛ぶ。

Parameter
type name summary
​string $name
Return
type summary
​mixed

[m] getUnsafeOption 単一のオプション値を返却する(キーチェックなし)

単一のオプション値を返却する(キーチェックなし)
protected function getUnsafeOption(string $name): mixed

オプション名が存在しない場合、例外は飛ばないが notice は出るかもしれない。

Parameter
type name summary
​string $name
Return
type summary
​mixed

[m] setOptions 配列でオプション値を設定する

配列でオプション値を設定する
public function setOptions(array $options): ryunosuke\dbml\Mixin\OptionTrait
Parameter
type name summary
​array $options
Return
type summary
OptionTrait

[m] setOption 単一のオプション値を設定する

単一のオプション値を設定する
public function setOption( string $name, mixed $value ): ryunosuke\dbml\Mixin\OptionTrait

オプション名が存在しない場合、例外が飛ぶ。

Parameter
type name summary
​string $name
​mixed $value
Return
type summary
OptionTrait

[m] setUnsafeOption 単一のオプション値を設定する(キーチェックなし)

単一のオプション値を設定する(キーチェックなし)
protected function setUnsafeOption( string $name, mixed $value ): ryunosuke\dbml\Mixin\OptionTrait

オプション名が存在しない場合、例外は飛ばないし、 getDefaultOptions で規定されている項目外も設定可能。

Parameter
type name summary
​string $name
​mixed $value
Return
type summary
OptionTrait

[m] storeOptions 配列でオプション値を設定し、返り値として元の値に戻すクロージャを返す

配列でオプション値を設定し、返り値として元の値に戻すクロージャを返す
public function storeOptions(array $options): \Closure
// 設定を hoge:1 にする $restore = $that->storeOptions(['hoge' => 1]); // この時点では hoge:1 のまま $that->something(); // $retore を呼ぶと設定が元に戻る $retore();
Parameter
type name summary
​array $options
Return
type summary
Closure

[m] mergeOption 配列のオプション値をマージする

配列のオプション値をマージする
public function mergeOption( string $name, array $options ): ryunosuke\dbml\Mixin\OptionTrait
Parameter
type name summary
​string $name
​array $options
Return
type summary
OptionTrait

[m] mergeUnsafeOption 配列のオプション値をマージする(キーチェックなし)

配列のオプション値をマージする(キーチェックなし)
protected function mergeUnsafeOption( string $name, array $options ): ryunosuke\dbml\Mixin\OptionTrait
Parameter
type name summary
​string $name
​array $options
Return
type summary
OptionTrait

[m] existsOption オプションが存在するなら true を返す

オプションが存在するなら true を返す
public function existsOption(string $name): bool
Parameter
type name summary
​string $name
Return
type summary
​bool

[m] option 引数が1つなら get、引数が2つなら set する

引数が1つなら get、引数が2つなら set する
public function option( string $name, mixed $value = null ): mixed
// getter として働く $that->option('opt-name'); // setter として働く $that->option('opt->name', 'opt-value');
Parameter
type name summary
​string $name
​mixed $value = null
Return
type summary
​mixed

[T] FetchMethodTrait

Hierarchy

[T] FetchOrThrowTrait

Hierarchy

[T] SelectMethodTrait

Hierarchy

[T] SelectOrThrowTrait

Hierarchy

[T] SelectInShareTrait

Hierarchy

[T] SelectForUpdateTrait

Hierarchy

[T] SelectForAffectTrait

Hierarchy

[T] EntityMethodTrait

Hierarchy

[m] entityArray エンティティ群を配列で返す(ryunosuke\dbml\Database::fetchArray()") も参照)

エンティティ群を配列で返す(ryunosuke\dbml\Database::fetchArray() も参照)
public function entityArray( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityAssoc エンティティ群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc()") も参照)

エンティティ群を連想配列で返す(ryunosuke\dbml\Database::fetchAssoc() も参照)
public function entityAssoc( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityTuple エンティティをオブジェクトで返す(ryunosuke\dbml\Database::fetchTuple()") も参照)

エンティティをオブジェクトで返す(ryunosuke\dbml\Database::fetchTuple() も参照)
public function entityTuple( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[T] EntityInShareTrait

Hierarchy

[m] entityArrayInShare ryunosuke\dbml\Database::entityArray()") の共有ロック版

ryunosuke\dbml\Database::entityArray() の共有ロック版
public function entityArrayInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityAssocInShare ryunosuke\dbml\Database::entityAssoc()") の共有ロック版

ryunosuke\dbml\Database::entityAssoc() の共有ロック版
public function entityAssocInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityTupleInShare ryunosuke\dbml\Database::entityTuple()") の共有ロック版

ryunosuke\dbml\Database::entityTuple() の共有ロック版
public function entityTupleInShare( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[T] EntityOrThrowTrait

Hierarchy

[m] entityArrayOrThrow ryunosuke\dbml\Database::entityArray()") の例外送出版

ryunosuke\dbml\Database::entityArray() の例外送出版
public function entityArrayOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityAssocOrThrow ryunosuke\dbml\Database::entityAssoc()") の例外送出版

ryunosuke\dbml\Database::entityAssoc() の例外送出版
public function entityAssocOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityTupleOrThrow ryunosuke\dbml\Database::entityTuple()") の例外送出版

ryunosuke\dbml\Database::entityTuple() の例外送出版
public function entityTupleOrThrow( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[T] EntityForUpdateTrait

Hierarchy

[m] entityArrayForUpdate ryunosuke\dbml\Database::entityArray()") の排他ロック版

ryunosuke\dbml\Database::entityArray() の排他ロック版
public function entityArrayForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityAssocForUpdate ryunosuke\dbml\Database::entityAssoc()") の排他ロック版

ryunosuke\dbml\Database::entityAssoc() の排他ロック版
public function entityAssocForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityTupleForUpdate ryunosuke\dbml\Database::entityTuple()") の排他ロック版

ryunosuke\dbml\Database::entityTuple() の排他ロック版
public function entityTupleForUpdate( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[T] EntityForAffectTrait

Hierarchy

[m] entityArrayForAffect ryunosuke\dbml\Database::entityArray()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityArray() の排他ロック兼例外送出版
public function entityArrayForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityAssocForAffect ryunosuke\dbml\Database::entityAssoc()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityAssoc() の排他ロック兼例外送出版
public function entityAssocForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[m] entityTupleForAffect ryunosuke\dbml\Database::entityTuple()") の排他ロック兼例外送出版

ryunosuke\dbml\Database::entityTuple() の排他ロック兼例外送出版
public function entityTupleForAffect( array|string $tableDescriptor, array|string $where = [], array|string $orderBy = [], array|int $limit = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​array|​string $orderBy = [] 並び順(ryunosuke\dbml\Query\SelectBuilder::orderBy()"))
​array|​int $limit = [] 取得件数(ryunosuke\dbml\Query\SelectBuilder::limit()"))
​array|​string $groupBy = [] グルーピング(ryunosuke\dbml\Query\SelectBuilder::groupBy()"))
​array|​string $having = [] HAVING 条件(ryunosuke\dbml\Query\SelectBuilder::having()"))
Return
type summary
SelectBuilder

[T] YieldTrait

Hierarchy

[m] yieldArray レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)

レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray() を参照)
public function yieldArray( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[m] yieldAssoc レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc()") を参照)

レコード群を連想配列で少しずつ返す(ryunosuke\dbml\Database::yieldAssoc() を参照)
public function yieldAssoc( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[m] yieldLists レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists()") を参照)

レコード群を[value]で少しずつ返す(ryunosuke\dbml\Database::yieldLists() を参照)
public function yieldLists( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[m] yieldPairs レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs()") を参照)

レコード群を[key => value]で少しずつ返す(ryunosuke\dbml\Database::yieldPairs() を参照)
public function yieldPairs( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[T] ExportTrait

Hierarchy

[m] exportArray レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray()") を参照)

レコード群を php 配列でエクスポートする(ryunosuke\dbml\Database::exportArray() を参照)
public function exportArray( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[m] exportCsv レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv()") を参照)

レコード群を CSV でエクスポートする(ryunosuke\dbml\Database::exportCsv() を参照)
public function exportCsv( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[m] exportJson レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson()") を参照)

レコード群を JSON でエクスポートする(ryunosuke\dbml\Database::exportJson() を参照)
public function exportJson( $config = [], $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
Parameter
type name summary
$config = []
$tableDescriptor = []
$where = []
$orderBy = []
$limit = []
$groupBy = []
$having = []

[T] SelectAggregateTrait

Hierarchy

[m] selectExists EXISTS クエリビルダを返す

EXISTS クエリビルダを返す
public function selectExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
// EXISTS (SELECT * FROM t_table) $db->selectExists('t_table'); // NOT EXISTS (SELECT * FROM t_table WHERE delete_flg = 0) $db->selectNotExists('t_table', ['delete_flg' => 0]);
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder EXISTS クエリビルダ

[m] selectNotExists ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists()") の NOT 版

ryunosuke\dbml\Mixin\SelectAggregateTrait::selectExists() の NOT 版
public function selectNotExists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
SelectBuilder NOT EXISTS クエリビルダ

[m] selectCount COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

COUNT クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectCount( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectMin MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MIN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMin( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectMax MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MAX クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMax( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectSum SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

SUM クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectSum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectAvg AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

AVG クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectAvg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectMedian MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

MEDIAN クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectMedian( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[m] selectJson JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate()") を参照)

JSON 集約クエリを返す(ryunosuke\dbml\Database::selectAggregate() を参照)
public function selectJson( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
SelectBuilder

[T] AggregateTrait

Hierarchy

[m] exists レコードの存在を返す

レコードの存在を返す
public function exists( array|string $tableDescriptor, array|string $where = [], bool $for_update = false ): bool
# 単純に t_article が存在するか bool で返す $db->exists('t_article'); // SELECT EXISTS (SELECT * FROM t_article) # 有効な t_article が存在するか bool で返す $db->exists('t_article', ['delete_flg' => 0]); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0) # 有効な t_article が存在するかロックしつつ bool で返す $db->exists('t_article', ['delete_flg' => 0], true); // SELECT EXISTS (SELECT * FROM t_article WHERE t_article.delete_flg = 0 FOR UPDATE)
Parameter
type name summary
​array|​string $tableDescriptor 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
​bool $for_update = false EXISTS チェックはしばしばロックを伴うのでそのフラグ
Return
type summary
​bool レコードが存在するなら true

[m] count COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

COUNT クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function count( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] min MIN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MIN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function min( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] max MAX クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MAX クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function max( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] sum SUM クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

SUM クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function sum( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] avg AVG クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

AVG クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function avg( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] median MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

MEDIAN クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function median( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[m] json JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate()") を参照)

JSON 集約クエリを実行する(ryunosuke\dbml\Database::aggregate() を参照)
public function json( array|string $column, array|string $where = [], array|string $groupBy = [], array|string $having = [] ): string|int|array
Parameter
type name summary
​array|​string $column 取得テーブルとカラム
​array|​string $where = [] 条件
​array|​string $groupBy = [] カラム名かその配列
​array|​string $having = [] 条件
Return
type summary
​string|​int|​array 集約結果

[T] SubSelectTrait

Hierarchy

[T] SubAggregateTrait

Hierarchy

[m] subexists 相関サブクエリの EXISTS を表すビルダを返す

相関サブクエリの EXISTS を表すビルダを返す
public function subexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
// SELECT 句での使用例 $db->select([ 't_article' => [ // 各 t_article に紐づく t_comment にレコードを持つなら true が返される 'has_comment' => $db->subexists('t_comment'), // 各 t_article に紐づく t_comment delete_flg = 0 なレコードを持たないなら true が返される 'has_not_comment' => $db->notSubexists('t_comment', ['delete_flg' => 0]), ], ]); // SELECT // EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id) AS has_comment, // NOT EXISTS (SELECT * FROM t_comment WHERE (delete_flg = '0') AND (t_comment.article_id = t_article.article_id)) AS has_not_comment // FROM t_article // WHERE 句での使用例 $db->select('t_article', [ // 「各記事でコメントを持つ記事」を表す WHERE EXISTS になる $db->subexists('t_comment'), ]); // SELECT // t_article.* // FROM t_article // WHERE (EXISTS (SELECT * FROM t_comment WHERE t_comment.article_id = t_article.article_id)) // JOIN も含めて複数テーブルがあり、明確に「t_article と t_comment で」結びたい場合はキーで明示する $db->select('t_article, t_something', [ // 「何と?」をキーで明示できる 't_article' => $db->subexists('t_comment'), // これだと t_something と t_comment での結合となる(外部キーがあれば、だが) 't_something' => $db->subexists('t_comment'), // さらに t_something に複数の外部キーがある場合は:で明示できる 't_something:fkname' => $db->subexists('t_comment'), ]);
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト

[m] notSubexists ryunosuke\dbml\Mixin\SubAggregateTrait::subexists()") の否定版

ryunosuke\dbml\Mixin\SubAggregateTrait::subexists() の否定版
public function notSubexists( array|string $tableDescriptor = [], array|string $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $tableDescriptor = [] 取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor
​array|​string $where = [] WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()"))
Return
type summary
SelectBuilder クエリビルダオブジェクト

[m] subcount 相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの COUNT を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subcount( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] submin 相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MIN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submin( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] submax 相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MAX を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submax( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] subsum 相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの SUM を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subsum( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] subavg 相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの AVG を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subavg( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] submedian 相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの MEDIAN を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function submedian( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[m] subjson 相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate()") を参照)

相関サブクエリの JSON を表すビルダを返す(ryunosuke\dbml\Database::subaggregate() を参照)
public function subjson( array|string $column, array $where = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array|​string $column サブテーブル名
​array $where = [] WHERE 条件
Return
type summary
SelectBuilder

[T] AffectOrThrowTrait

Hierarchy

[T] AffectAndPrimaryTrait

Hierarchy

[T] AffectAndBeforeTrait

Hierarchy

[T] IteratorTrait イテレータ(主に結果セット)を利用しやすくするための trait

イテレータ(主に結果セット)を利用しやすくするための trait

結果セットプロバイダを渡すと \Countable::count, \IteratorAggregate::getIterator においてその結果セットの値を返すようになる。

Hierarchy

[m] setProvider 結果セットプロバイダを登録する

結果セットプロバイダを登録する
public function setProvider(array|string|\Closure $caller): ryunosuke\dbml\Mixin\IteratorTrait

クロージャを渡すと単純にそのクロージャがコールされる。 文字列を渡すとメソッド名でコールする。 要素が一つだけの配列を与えるとキーをメソッド名、値を引数としてコールする。

いずれにせよ、全てクロージャに変換され、そのクロージャの $this はこのトレイトを use しているインスタンス自身になる。

// クロージャが単純にコールされる $that->setProvider(function () {return (array) $this;}); // $that->method() がコールされる $that->setProvider('method'); // $that->method(1, 2, 3) がコールされる $that->setProvider(['method'] => [1, 2, 3]);
Parameter
type name summary
​array|​string|​Closure $caller プロバイダ
Return
type summary
IteratorTrait

[m] resetProvider 結果セットプロバイダを解除する

結果セットプロバイダを解除する
public function resetProvider(): ryunosuke\dbml\Mixin\IteratorTrait
Return
type summary
IteratorTrait

[m] resetResult 結果セットをクリアして無効化する

結果セットをクリアして無効化する
public function resetResult(): ryunosuke\dbml\Mixin\IteratorTrait
Return
type summary
IteratorTrait

[m] getResult 結果セットを取得する

結果セットを取得する
public function getResult(): array

結果はキャッシュされるため、複数回呼んでも問題ない。

Return
type summary
​array

[m] getIterator 結果セットのイテレータを返す

結果セットのイテレータを返す
public function getIterator(): \Traversable
Return
type summary
Traversable

[m] count 結果セットの件数を返す

結果セットの件数を返す
public function count(): int
Return
type summary
​int

[T] JoinTrait

Hierarchy

[m] joinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder

[m] innerJoinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder

[m] leftJoinOn 結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder

[m] rightJoinOn 結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder

[m] joinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] autoJoinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] innerJoinForeign 結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] leftJoinForeign 結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] rightJoinForeign 結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] joinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeignOn( $table, string|array $on = [], ?string $fkeyname = null, $from = null ): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
$table
​string|​array $on = [] 結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える
​?string $fkeyname = null 外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外)
$from = null
Return
type summary
TableGateway

[m] autoJoinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] innerJoinForeignOn 結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] leftJoinForeignOn 結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] rightJoinForeignOn 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[T] FindTrait

Hierarchy

[m] find 主キー指定でレコードを取得する

主キー指定でレコードを取得する
public function find( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[m] findOrThrow ryunosuke\dbml\Gateway\TableGateway::find()") の例外送出版

ryunosuke\dbml\Gateway\TableGateway::find() の例外送出版
public function findOrThrow( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[m] findInShare ryunosuke\dbml\Gateway\TableGateway::find()") の共有ロック版

ryunosuke\dbml\Gateway\TableGateway::find() の共有ロック版
public function findInShare( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[m] findForUpdate ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック版

ryunosuke\dbml\Gateway\TableGateway::find() の排他ロック版
public function findForUpdate( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[m] findForAffect ryunosuke\dbml\Gateway\TableGateway::find()") の排他ロック兼例外送出版

ryunosuke\dbml\Gateway\TableGateway::find() の排他ロック兼例外送出版
public function findForAffect( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $variadic_primary 主キー値あるいは配列
​mixed $tableDescriptor = [] 取得カラム
Return
type summary
SelectBuilder

[T] FactoryTrait 拡張クラスを返せるようにする trait

拡張クラスを返せるようにする trait

insteadof して new するとそのクラスを返す。

Hierarchy

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait

[N] ryunosuke\dbml\Query\

[C] SelectBuilder SELECT ビルダークラス

SELECT ビルダークラス

IteratorAggregate, Countable

IteratorAggregate, Countable を実装しているので、 foreach で回すことができるし、count($qb) で件数の取得もできる。 foreach の取得処理は array() であり、レコードの配列(≒連想配列)が渡ってくる。 count() はその件数である。

$qb = $db->select('t_article'); foreach ($qb as $row) { // $row は ['id' => 1, 'title' => 'hoge title'] のような配列 } echo count($qb); // t_article の件数を返す

プリペアードステートメント

明示的に prepare のようなメソッドを呼ばない限り内部のプリペアードステートメントでは名前付きパラメータを一切使用しない(ryunosuke\dbml\Query\Statement も参照)。 prepare を呼ぶと現時点のパラメータで固定することができ、その上で :name のような名前付きパラメータに値を渡すことができる。

Hierarchy

Parents
type summary
AbstractBuilder
Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Stringable
IteratorAggregate
Countable
Traversable
Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait
IteratorTrait イテレータ(主に結果セット)を利用しやすくするための trait
JoinTrait
FetchMethodTrait
FetchOrThrowTrait

[C] CLAUSES

public const array CLAUSES = ["column", "where", "orderBy", "limit", "groupBy", "having"]

[C] LAZY_MODE_EAGER

public const string LAZY_MODE_EAGER = "eager"

[C] LAZY_MODE_BATCH

public const string LAZY_MODE_BATCH = "batch"

[C] LAZY_MODE_FETCH

public const string LAZY_MODE_FETCH = "fetch"

[C] LAZY_MODE_YIELD

public const string LAZY_MODE_YIELD = "yield"

[C] LAZY_MODES

public const array LAZY_MODES = [ "eager" => [ "prepared" => false, "generated" => false, ], "batch" => [ "prepared" => false, "generated" => true, ], "fetch" => [ "prepared" => true, "generated" => false, ], "yield" => [ "prepared" => true, "generated" => true, ], ]

[p] $sqlParts

protected array $sqlParts = [ "comment" => [], "with" => [], "option" => [], "select" => [], "selectComment" => [], "union" => [], "from" => [], "join" => [], "hint" => [], "where" => [], "groupBy" => [], "having" => [], "window" => [], "orderBy" => [], "offset" => null, "limit" => null, "operator" => null, ]

Type: array

[p] $cache

protected array $cache = []

Type: array

[p] $callbacks

protected array $callbacks = []

Type: array

[p] $applyments

protected array $applyments = [ "before" => null, "after" => null, ]

Type: array

[p] $joinOrders

protected array $joinOrders = []

Type: array

[p] $onConditions

protected array $onConditions = []

Type: array

[p] $wrappers

protected array $wrappers = []

Type: array

[p] $lockMode

protected Doctrine\DBAL\LockMode|int $lockMode = 0

Type: LockMode|​int

[p] $lockOption

protected string $lockOption = ""

Type: string

[p] $subbuilders

protected array|ryunosuke\dbml\Query\SelectBuilder[] $subbuilders = []

Type: array|​SelectBuilder[]

[p] $submethod

protected string|bool|null $submethod = null

Type: string|​bool|​null

[p] $subwhere

protected ?string $subwhere = null

Type: ?string

[p] $lazyMode

protected ?string $lazyMode = null

Type: ?string

[p] $lazyMethod

protected ?string $lazyMethod = null

Type: ?string

[p] $lazyParent

protected ?string $lazyParent = null

Type: ?string

[p] $lazyColumns

protected array $lazyColumns = []

Type: array

[p] $lazyCondition

protected array $lazyCondition = []

Type: array

[p] $lazyChunk

protected ?int $lazyChunk = null

Type: ?int

[p] $caster fetch 時のタイプ

fetch 時のタイプ
protected string|callable $caster = null

Type: string|​callable

[p] $emptyCondition

protected ?bool $emptyCondition = null

Type: ?bool

[p] $enableAutoOrder

protected ?bool $enableAutoOrder = null

Type: ?bool

[p] $database

protected ryunosuke\dbml\Database $database

Type: Database

Prototype
kind source summary
​inherit AbstractBuilder::$database

[p] $sql

protected string $sql

Type: string

Prototype
kind source summary
​inherit AbstractBuilder::$sql

[p] $params

protected array $params

Type: array

Prototype
kind source summary
​inherit AbstractBuilder::$params

[p] $statement

protected ryunosuke\dbml\Query\Statement $statement

Type: Statement

Prototype
kind source summary
​inherit AbstractBuilder::$statement

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override AbstractBuilder::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] __construct コンストラクタ

コンストラクタ
public function __construct(ryunosuke\dbml\Database $database)
Parameter
type name summary
Database $database
Prototype
kind source summary
​override AbstractBuilder::__construct()

[m] __invoke 句を追加する

句を追加する
public function __invoke(ryunosuke\dbml\Query\Clause\AbstractClause ...$clauses): ryunosuke\dbml\Query\SelectBuilder

例えば OrderBy の場合 $builder->orderBy(OrderBy::primary()); となり表現が冗長となる。 この invoke を使えば $builder(OrderBy::primary()); となり表現が平易となる。

Parameter
type name summary
AbstractClause ...$clauses
Return
type summary
SelectBuilder

[m] __toString クエリ文字列を返す

クエリ文字列を返す
public function __toString(): string
Return
type summary
​string

[m] cast 取得クラスを指定。クラス名ならそのクラスで、コールバックならそれの呼び出し、になる

取得クラスを指定。クラス名ならそのクラスで、コールバックならそれの呼び出し、になる
public function cast(null|string|callable $classname = null): ryunosuke\dbml\Query\SelectBuilder

このメソッドを使うとこのインスタンスが返すレコード配列の型を指定できる。 指定の方法は大まかには下記の4種類。

  1. callable (行配列を受け取るクロージャ)
    • 最も汎用性がある
  2. クラス名
    • 与えたクラスのインスタンスで返却されるようになる
  3. null (あるいは未指定)
    • 駆動表から導き出されるエンティティクラスで返却されるようになる(指定がない場合はデフォルトエンティティ)
  4. "array" という文字列
    • 配列で返却するようになる(実質的に解除動作として動作する)
# 1. callable $qb->column('table_name')->cast(function ($row) { // $row はレコードの各行の配列 return new \ArrayObject($row, \ArrayObject::ARRAY_AS_PROPS); }); // table_name のレコードを ArrayObject インスタンスで返すようになる # 2. クラス名 $qb->column('table_name')->cast(EntityClass::class); // table_name のレコードを EntityClass インスタンスで返すようになる # 3. null(省略) $qb->column('table_name')->cast(); // table_name のレコードを TableName インスタンスで返すようになる(駆動表 -> エンティティ名は Database に対して指定する) # 4. "array" $qb->column('table_name')->cast("array"); // 何もしなかった場合と変わらない。が、上記の 1~3 で設定したものを解除できるという重要な役割がある

なお、 このメソッドを呼んでも、 listspairs には一切影響しない。 これらは配列を返すメソッドであり、「レコード」という概念が通用しない。 value もスカラー値なので同様。

Parameter
type name summary
​null|​string|​callable $classname = null 取得クラス
Return
type summary
SelectBuilder

[m] operatize 自身がサブクエリ化されたときの演算を定義する

自身がサブクエリ化されたときの演算を定義する
public function operatize( ?string $operator, mixed $operands = [] ): ryunosuke\dbml\Query\SelectBuilder
# コメントを10つ以上持つ記事を返す $db->select('t_article A', [ $db->subcount('t_comment C')->operatize('>=', 10), ]); // SELECT A.* FROM t_article A WHERE (SELECT COUNT(*) FROM t_comment C WHERE C.article_id = A.article_id) >= 10
Parameter
type name summary
​?string $operator
​mixed $operands = []
Return
type summary
SelectBuilder

[m] build 各種設定メソッドへのプロクシメソッド

各種設定メソッドへのプロクシメソッド
public function build( array $queryParts, bool $append = false ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​array $queryParts
​bool $append = false
Return
type summary
SelectBuilder

[m] scope スコープを当てる

スコープを当てる
public function scope( string $tablename, array|string $scope, ...$args ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​string $tablename
​array|​string $scope
...$args
Return
type summary
SelectBuilder

[m] setLazyMode lazyMode を設定する

lazyMode を設定する
public function setLazyMode(?string $lazyMode = null): ryunosuke\dbml\Query\SelectBuilder

このメソッドを呼ぶと fetch 系メソッドは実行されなくなる。 引数無しで呼ぶと解除される。

eager
親の取得と同時に一括取得する(親キーの IN)
batch
最初のアクセス時に一括取得する(親キーの IN の Generator)
fetch
都度クエリを投げる(prepared statement)
yield
必要になったらクエリを投げる(prepared statement の Generator)
Parameter
type name summary
​?string $lazyMode = null
Return
type summary
SelectBuilder

[m] with WITH 句を設定する

WITH 句を設定する
public function with( string $name, ryunosuke\dbml\Query\Queryable|string|null $query ): ryunosuke\dbml\Query\SelectBuilder

$name は何も加工されずにそのままクエリに埋め込まれる。 今のところ (colname) などもここに含める用途となる。

$query に null を指定すると削除として働く。

Parameter
type name summary
​string $name
Queryable|​string|​null $query
Return
type summary
SelectBuilder

[m] addSelectOption select オプションを追加する

select オプションを追加する
public function addSelectOption(?string $option): ryunosuke\dbml\Query\SelectBuilder

SELECT オプションとは「SELECT 句のカラム群の前に(カラムとは区別されて)置かれる文字列」のこと。 典型的には DISTINCT や STRAIGHT_JOIN など。

$qb->addSelectOption(SelectOption::SQL_CACHE)->column('test'); // SELECT SQL_CACHE test.* FROM test
Parameter
type name summary
​?string $option
Return
type summary
SelectBuilder

[m] column [table => [col1, col2]] のような指定を出来るようにする(クリア版)

[table => [col1, col2]] のような指定を出来るようにする(クリア版)
public function column($tableDescriptor): ryunosuke\dbml\Query\SelectBuilder

かなり多彩な指定ができる(複雑とも言う)。

$qb->column([ 'table1' => [ 'aliasA' => 'columnA', 'aliasB' => 'columnB', '+table2' => [ 'aliasA' => 'columnA', 'aliasB' => 'columnB', ], 'table3' => [ 'aliasA' => 'columnA', 'aliasB' => 'columnB', ], ], 'table4' => [ 'aliasA' => 'columnA', 'aliasB' => 'columnB', 'aliasC|datetime' => 'columnC', ], ]);

上記が基本構文となる。原則的には「取得したいテーブルの配下にカラムを置く」になる。 ネストさせると JOIN あるいは子テーブル取得になる(先頭の JOIN 記号で区別する)。 並列に並べると JOIN ではなく複数の FROM になる。

上記で言えば table1, table4 を駆動表として、table2 を JOIN、table3 を子テーブルとして取得する、というクエリになる。

実際は怠惰に文字列だけで指定できたり、糖衣構文が多数存在する。そもそも「テーブル名」を書く場所にテーブル記法が使えたりする。 ざっくりと記法を一覧したものが下記(No が飛んでいるのに深い意味はない)。

No type 説明
0 ['cond1', 'cond2' => 1] ネスト配列に素の配列を混ぜると JOIN 条件扱い
1 "**" 子テーブルを含めた全テーブル全列を取得
2 null null を与えると「何も取得しない」を明示
4 "!hoge" hoge 列以外を取得
5 "!" 仮想カラムを含めたテーブルの全列を取得(これは「空文字カラム以外を全て」を意味するので結局全てのカラムが得られる、ということになる)
8 "..hoge" subselect 時において親のカラムを表す
10 "+prefix.column_name" JOIN 記号+ドットを含む文字列は prefix テーブルと JOIN してそのカラムを取得
11 Expression::new("NOW()") ryunosuke\dbml\Query\Expression\Expression を与えると一切加工せずそのまま文字列を表す
12 "NOW()" 上と同じ。 () を含む文字列は自動で ryunosuke\dbml\Query\Expression\Expression 化される
13 (object) ['$' => 'id', 'key' => 'value'] stdClass を与えると JSON で集約される。$ を与えるとキーになる
21 ['alias|typename' => 'column'] 配列のキーをパイプでつなぐとその型に変換されて取得できる
22 ['alias' => function($row){}] デフォルト値がないクロージャは行全体が渡ってくるコールバックになる
25 ['cname' => function($cname=null){}] デフォルト値が null のクロージャはカラム値が単一で渡ってくるコールバックになる
26 ['alias' => function($c1='id', $c2='name'){}] デフォルト値が文字列のクロージャそれぞれが個別で渡ってくるコールバックになる
27 function(){return function($v){return $v;};} クロージャの亜種。クロージャを返すクロージャはそのままクロージャとして活きるのでメソッドのような扱いにできる
30 Gateway object Gateway の表すテーブルとの ryunosuke\dbml\Database::subselect() 相当の動作
31 ['+alias' => Gateway object] Gateway の表すテーブルとの JOIN を表す
50 'TableDescriptor' 「テーブル名」を書く場所にはテーブル記法が使用できる(駆動表)
51 ['+TableDescriptor' => ['*']] 「テーブル名」を書く場所にはテーブル記法が使用できる(JOIN)
80 SelectOption::DISTINCT() SelectOption インスタンスを与えると addSelectOption と同等の効果を示す
98 ['' => ['expression']] 空キーは「テーブルに紐付かないカラム指定」を表す

上記の通り、尋常ではないほど複雑なのでサンプルコードを以下に記す。

# No.0: 素の配列を混ぜると JOIN 条件になる(形式は where と全く同じ) $qb->column([ 't_article A.*' => [ '+t_comment: C.*' => [ // 外部キーがあると自動で ON が付くので、外すことを明示するために: が必要 // 素の配列はそのテーブルと親テーブル(この場合 t_article と t_comment) の結合条件になる ['A.article_id = C.article_id', 'C.delete_flg' => 0], ], ], ]); # No.1: t_ancestor に紐づく t_parent に紐づく t_child を怠惰に取得(*の数だけ子リレーションを辿る) $qb->column('t_ancestor.***'); # No.2: null は何も取得しないがキーは活きる(t_article に紐づくリレーションを怠惰に取得したいが、特定テーブルは除きたい場合など) $qb->column([ 't_article' => [ '***', 't_imgblob' => null, 't_hugelog' => null, ], ]); # No.4: ! を付けるとそのテーブル内でそれ以外を取得する $qb->column([ 't_article' => [ '!content', // 例えば一覧画面でデータ量の大きい本文を取得したくないときなど ], ]); # No.8: "..hoge" で subselect における親カラムを参照できる $qb->column([ 't_article' => [ '*', 't_comment C' => [ '..article_title', // 子テーブルのコンテキストで親のカラムが参照できる 'atitle' => '..article_title', // 全く同じ。エイリアスも貼れる ], ], ]); # No.10: 自動プレフィックス JOIN $qb->column([ 't_comment' => [ // このように値に join 記号+テーブル.カラムを置くと自動で JOIN される '+t_article.article_title', '+t_article.tags', // このように2つ並べても同テーブルであれば JOIN されるのは1回のみ ], ]); # No.11, 12: Expression $qb->column([ 't_article' => [ 'upper_title' => Expression::new('UPPER(article_title)'), // タイトルを大文字で取得 'upper_title' => 'UPPER(article_title)', // 全く同じ。カッコを含めば自動で Expression 化される ], ]); # No.22: 行全体を受け取るクロージャ $qb->column([ 't_article' => [ // $row は行全体が渡ってくる 'row' => function($row){}, ], ]); # No.25, 26: カラム値を受け取るクロージャ $qb->column([ 't_article' => [ // デフォルト値を null にするとキーのカラム値が渡ってくる 'id' => function($id=null){return $id * 10;}, // デフォルト値でカラムを指定できる 'idname' => function($id='id', $name='name'){return "$id: $name";}, ], ]); # No.27: クロージャを返すクロージャ $tuple = $qb->column([ 't_article.*' => [ // クロージャ内の $this は行そのものを表す ArrayAccess なオブジェクト(現実装は ArrayObject)で bind される 'func' => function(){return function($prefix){return $prefix . $this['name'];};}, // 静的クロージャは bind されない 'static' => function($row){return function($prefix)use($row){return $prefix . $row['name'];};}, ], ])->tuple(); // 'func' や 'static' にはクロージャが格納されているので呼び出しが可能 $tuple['func']('prefix-'); // => 'prefix-hogehoge' $tuple['static']('prefix-'); // => 'prefix-hogehoge' # No.30, 31:配列で指定する箇所は Gateway も指定できる $qb->column([ 't_article' => [ 'comments1' => $db->t_comment, // t_comment を子テーブルとして取得する '+comments2' => $db->t_comment, // t_comment と JOIN される ], ]); # No.50, 51:テーブル記法 $qb->column('t_article(1)'); // 主キー = 1 と同じ $qb->column([ // 駆動表にも使えるし 't_article(1) AS A' => [ // JOIN 表にも使える '+t_comment@scope[state: active] AS C' => ['*'], ] ]); // 応用。アクティブな記事をID昇順で10件取り、そのそれぞれのコメントを作成日降順で3件ずつ取る(いわゆるグループ内のN件取得) $qb->column([ 't_article[state: active]+id#0-10 AS A.*' => [ 't_comment-create_date#0-3 AS C.*' => [] ], ]); # No.80:SelectOption を与える $qb->column([ 't_article' => [ SelectOption::DISTINCT(), '*', ], ]); # No.98: 空文字キーによるテーブルに紐付かないカラム指定(勝手に修飾されたり JOIN されたりせず、シンプルに SELECT 句に追加される) $qb->column([ 't_table' => '*', '' => [ 'now' => 'NOW()', 'ttc' => 't_table.colA', // 修飾子として動作する 'ope' => ['column_name:LIKE' => 'hoge'], // operator として動作する ], ]);
Parameter
type name summary
$tableDescriptor
Return
type summary
SelectBuilder

[m] addColumn [table => [col1, col2]] のような指定を出来るようにする(ryunosuke\dbml\Query\SelectBuilder::column()") の追加版)

[table => [col1, col2]] のような指定を出来るようにする(ryunosuke\dbml\Query\SelectBuilder::column() の追加版)
public function addColumn( $tableDescriptor, ?string $parent = null, bool $defaultScoped = false ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$tableDescriptor
​?string $parent = null
​bool $defaultScoped = false
Return
type summary
SelectBuilder

[m] select select 列を設定する(クリア版)

select 列を設定する(クリア版)
public function select(...$selects): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
...$selects
Return
type summary
SelectBuilder

[m] addSelect select 列を設定する(ryunosuke\dbml\Query\SelectBuilder::select()") の追加版)

select 列を設定する(ryunosuke\dbml\Query\SelectBuilder::select() の追加版)
public function addSelect(...$selects): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
...$selects
Return
type summary
SelectBuilder

[m] unselect カラム・エイリアスの完全一致で select 句から取り除く

カラム・エイリアスの完全一致で select 句から取り除く
public function unselect(...$aliases): ryunosuke\dbml\Query\SelectBuilder

クロージャを与えるとコールバックされ、 true 相当を返した時に取り除かれる。 文字列を与えるとエイリアス or 完全カラムに一致した時に取り除かれる。 数値を与えるとその番目が取り除かれる(都度連番はリセットされるので注意)。

Parameter
type name summary
...$aliases
Return
type summary
SelectBuilder

[m] from FROM 句(JOIN 込)を構成する

FROM 句(JOIN 込)を構成する
public function from( $table, ?string $alias = null, ?string $type = null, $condition = [], ?string $fkeyname = null, ?string $fromAlias = null ): ryunosuke\dbml\Query\SelectBuilder

結合タイプや結合条件をまとめて指定して FROM, JOIN を構成できるが、複雑極まりないので使用は非推奨(FROM 句の設定は ryunosuke\dbml\Query\SelectBuilder::column() を使用すれば基本的に不要)。

Parameter
type name summary
$table
​?string $alias = null
​?string $type = null
$condition = []
​?string $fkeyname = null
​?string $fromAlias = null
Return
type summary
SelectBuilder

[m] join 結合タイプや結合条件、外部キーを指定して JOIN する

結合タイプや結合条件、外部キーを指定して JOIN する
public function join( string $type, $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder

実際は下記のようなエイリアスメソッドが定義されているのでそちらを使うことが多く、明示的に呼ぶことはほとんどない。 さらに単純な JOIN であれば ryunosuke\dbml\Query\SelectBuilder::column() でも可能なため、ますます出番はない。

# 指定条件で ON して JOIN $qb->from('t_from')->innerJoinOn('t_join', ['hoge = fuga']); // SELECT FROM t_from INNER JOIN t_join ON hoge = fuga # 外部キーカラムで ON して JOIN $qb->from('t_from')->innerJoinForeign('t_join', 'ForeignKeyName'); $qb->from('t_from')->innerJoinForeign('t_join'); // テーブル間外部キーが1つなら省略可能 // SELECT FROM t_from INNER JOIN t_join ON t_from.foreign_col = t_join.foreign_col # 外部キーカラムと指定条件で ON して JOIN $qb->from('t_from')->innerJoinForeignOn('t_join', ['hoge = fuga'], 'ForeignKeyName'); // SELECT FROM t_from INNER JOIN t_join ON ((t_from.foreign_col = t_join.foreign_col) AND (hoge = fuga))
Parameter
type name summary
​string $type
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder

[m] innerJoinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinOn() 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinOn 結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinOn() 結合方法が LEFT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinOn 結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinOn() 結合方法が RIGHT で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] autoJoinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::autoJoinForeign() 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] innerJoinForeign 結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinForeign() 結合方法が INNER で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinForeign 結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinForeign() 結合方法が LEFT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinForeign 結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinForeign() 結合方法が RIGHT で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] autoJoinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function autoJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::autoJoinForeignOn() 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] innerJoinForeignOn 結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function innerJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::innerJoinForeignOn() 結合方法が INNER で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] leftJoinForeignOn 結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function leftJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::leftJoinForeignOn() 結合方法が LEFT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] rightJoinForeignOn 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function rightJoinForeignOn( $table, $on, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::rightJoinForeignOn() 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] on 自身が JOIN されたときの ON 条件を設定する

自身が JOIN されたときの ON 条件を設定する
public function on($condition): ryunosuke\dbml\Query\SelectBuilder
# 記事とそれに紐づく最新のコメントを JOIN して取得 $db->select([ 't_article A' => [ 'article_id', '<t.maxid' => $db->select([ 't_comment' => [ 'article_id', 'maxid' => 'MAX(comment_id)', ], ])->groupBy('article_id')->on('t.article_id = A.article_id'), '<t_comment C' => [ '!article_id', ['C.comment_id = t.maxid'], ], ], ]); // SELECT A.article_id, t.maxid, C.comment_id, C.comment // FROM t_article A // LEFT JOIN ( // SELECT t_comment.article_id, MAX(comment_id) AS maxid // FROM t_comment GROUP BY article_id // ) t ON t.article_id = A.article_id // LEFT JOIN t_comment C ON (C.article_id = A.article_id) AND (C.comment_id = t.maxid)
Parameter
type name summary
$condition
Return
type summary
SelectBuilder

[m] where 引数内では AND、引数間では OR する where(クリア版)

引数内では AND、引数間では OR する where(クリア版)
public function where(...$predicates): ryunosuke\dbml\Query\SelectBuilder

基本は ryunosuke\dbml\Query\Clause\Where::build() の where 記法と同じ。加えて下記の記法が使用できる。

No where 説明
30 ['' => 123] キーを空文字にすると駆動表の主キーを表す
33 ['*.delete_flg' => 1] テーブル部分に * を指定すると「あらゆるテーブルのそのカラム」を意味する
40 ['table.vcolumn' => "hoge"] 仮想カラム(単純なものに限る)も普通のカラムと同じように指定できる
41 ['table.vcolumn' => [cond]] 仮想カラム(実態が subselect に限る)に配列パラメータを与えると「追加の WHERE で EXISTS」となる。この記法は whereInto と同じく、ユーザ入力を直接与えると SQL インジェクションの危険があるため、決してユーザ由来の値を渡してはならない
# 引数配列内では AND、引数間では OR される $qb->where(['hoge = 1', 'fuga = ?' => 1], ['piyo' => 1]); // WHERE (hoge = 1 AND fuga = 1) OR (piyo = 1) # No.30(空キーは駆動表の主キーを表す) $qb->column('t_article')->where(['' => 123]); // WHERE article_id = 123 $qb->column('t_article')->where(['' => [123, 456]]); // WHERE article_id IN (123, 456) $qb->column('t_multi')->where(['' => [123, 456]]); // WHERE id1 = 123 AND id2 = 456 $qb->column('t_multi')->where(['' => [[1, 2], [3, 4]]]); // WHERE (id1 = 1 AND id2 = 2) OR (id1 = 3 AND id2 = 4) # No.33(例えば対象テーブルに delete_flg があり、 delete_flg = 0 を付与したい場合、下記のようにすると全てのテーブルに付与される) $qb->column('table1 t1, table2 t2, table3 t3')->where(['*.delete_flg' => 0]); // WHERE (t1.delete_flg = 0) AND (t2.delete_flg = 0) AND (t3.delete_flg = 0) # No.40(仮想カラムを指定。仮想カラムは「親に紐づく子供の COUNT」とする) $qb->column('t_parent')->where(['t_parent.child_count' => 0]); // WHERE (SELECT COUNT(*) FROM t_child WHERE (t_child.parent_id = t_parent.id)) = 0 # No.41(仮想カラムを指定。仮想カラムは「親に紐づく子供の subselect」とする) $qb->column('t_parent')->where(['t_parent.children' => ['delete_flg' => 0]]); // WHERE EXISTS(SELECT * FROM t_child WHERE (t_child.parent_id = t_parent.id AND delete_flg = 0)) = 0
Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] notWhere NOT つきで引数内では AND、引数間では OR する where(クリア版)

NOT つきで引数内では AND、引数間では OR する where(クリア版)
public function notWhere(...$predicates): ryunosuke\dbml\Query\SelectBuilder

NOT が付くこと以外は ryunosuke\dbml\Query\SelectBuilder::where() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] andWhere 現在に対して AND で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::where()") の追加版)

現在に対して AND で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::where() の追加版)
public function andWhere(...$predicates): ryunosuke\dbml\Query\SelectBuilder

クリアされずに追加されること以外は ryunosuke\dbml\Query\SelectBuilder::where() と同じ。

$qb->where('current'); $qb->andWhere(['a', 'b'], ['c', 'd']); // results: (current) AND ((a AND b) OR (c AND d))
Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] andNotWhere 現在に対して AND で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::andWhere()") の NOT 版)

現在に対して AND で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::andWhere() の NOT 版)
public function andNotWhere(...$predicates): ryunosuke\dbml\Query\SelectBuilder

NOT が付く以外は ryunosuke\dbml\Query\SelectBuilder::andWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] orWhere 現在に対して OR で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::where()") の追加版)

現在に対して OR で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::where() の追加版)
public function orWhere(...$predicates): ryunosuke\dbml\Query\SelectBuilder

クリアされずに OR で追加されること以外は ryunosuke\dbml\Query\SelectBuilder::where() と同じ。

$qb->where('current'); $qb->orWhere(['a', 'b'], ['c', 'd']); // results: (current) OR ((a AND b) OR (c AND d))
Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] orNotWhere 現在に対して OR で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::orWhere()") のNOT 版)

現在に対して OR で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::orWhere() のNOT 版)
public function orNotWhere(...$predicates): ryunosuke\dbml\Query\SelectBuilder

NOT が付く以外は ryunosuke\dbml\Query\SelectBuilder::orWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] endWhere 現在の条件をブロック化する

現在の条件をブロック化する
public function endWhere(): ryunosuke\dbml\Query\SelectBuilder

AND/OR は基本的に andWhere/orWhere の「引数内では AND、引数間では OR」という仕様で賄えるが、既にあるブロックはどうしようもない。 このメソッドを呼ぶと現在の条件を1つのブロックとみなして括弧が付与されるようになる。

$qb->where('a'); $qb->orWhere('b'); $qb->endWhere(); // これがあることで括弧が付く $qb->andWhere('c'); // results: (a OR b) AND c $qb->where('a'); $qb->orWhere('b'); //$qb->endWhere(); これがないと括弧が付かない $qb->andWhere('c'); // results: a OR b AND c
Return
type summary
SelectBuilder

[m] window WINDOW 句(クリア版)

WINDOW 句(クリア版)
public function window( string $name, $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\SelectBuilder

エスケープなどは一切行われないので注意(OVER でリテラルを指定するシチュエーションが少ないため)。 ただし Queryable は受け付ける。

// 簡易な文字列指定 $qb->window('w', 'gid', 'id', 'ROWS UNBOUNDED PRECEDING'); // results: WINDOW w AS (PARTITION BY gid ORDER BY id ROWS UNBOUNDED PRECEDING) // 配列など $qb->window('w', ['gid1', 'gid2'], ['id', 'subid' => false, '-prise'], ['ROWS' => [1, 1]]); // results: WINDOW w AS (PARTITION BY gid1, gid2 ORDER BY id, subid DESC, prise DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
Parameter
type name summary
​string $name
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
SelectBuilder

[m] addWindow WINDOW 句(追加版)

WINDOW 句(追加版)
public function addWindow( string $name, $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​string $name
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
SelectBuilder

[m] groupBy [table => array(col1, col2)] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::groupBy()")(クリア版)

[table => array(col1, col2)] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::groupBy()(クリア版)
public function groupBy(...$groupBy): ryunosuke\dbml\Query\SelectBuilder
# シンプルにカラムを指定 $qb->groupBy('id1'); // GROUP BY id1 $qb->groupBy('id1', 'id2'); // GROUP BY id1, id2 # 配列も指定できる。キーを与えるとテーブルプレフィックスになる $qb->groupBy(['id1', 'id2']); // GROUP BY id1, id2 $qb->groupBy(['T' => ['id1', 'id2']]); // GROUP BY T.id1, T.id2
Parameter
type name summary
...$groupBy
Return
type summary
SelectBuilder

[m] addGroupBy [table => [col1, col2]] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::groupBy()")(追加版)

[table => [col1, col2]] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::groupBy()(追加版)
public function addGroupBy(...$groupBy): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
...$groupBy
Return
type summary
SelectBuilder

[m] having 引数内では AND、引数間では OR する having(クリア版)

引数内では AND、引数間では OR する having(クリア版)
public function having(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::where() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] notHaving NOT つきで引数内では AND、引数間では OR する having(クリア版)

NOT つきで引数内では AND、引数間では OR する having(クリア版)
public function notHaving(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::notWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] andHaving 引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having()") の追加版)

引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having() の追加版)
public function andHaving(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::andWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] andNotHaving NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::notHaving()") の追加版)

NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::notHaving() の追加版)
public function andNotHaving(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::notWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] orHaving 現在に対して OR で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having()") の追加版)

現在に対して OR で引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having() の追加版)
public function orHaving(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::orWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] orNotHaving 現在に対して OR で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having()") の追加版)

現在に対して OR で NOT つきで引数内では AND、引数間では OR する(ryunosuke\dbml\Query\SelectBuilder::having() の追加版)
public function orNotHaving(...$predicates): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::orNotWhere() と同じ。

Parameter
type name summary
...$predicates
Return
type summary
SelectBuilder

[m] endHaving 現在の条件をブロック化する

現在の条件をブロック化する
public function endHaving(): ryunosuke\dbml\Query\SelectBuilder

WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::endWhere() と同じ。

Return
type summary
SelectBuilder

[m] orderBy [col => ASC] のように指定できるように拡張した orderBy(クリア版)

[col => ASC] のように指定できるように拡張した orderBy(クリア版)
public function orderBy( $sort, $order = null, ?string $nullsOrder = null ): ryunosuke\dbml\Query\SelectBuilder

ORDER BY 句を設定する。 渡し方が引数だったり配列だったりするのでややこしく見えるが、原則として カラム名, 順序 のタプルを渡す。 「カラム名」に特記事項はない。「順序」は 未指定, 'ASC', true などが昇順を表し、 'DESC', false などが降順を表す。 第3引数で null の場合の挙動を指定できる。

# シンプルなカラム ORD $qb->orderBy('col'); // ORDER BY col ASC $qb->orderBy('col', true); // ORDER BY col ASC $qb->orderBy('col', 'ASC'); // ORDER BY col ASC $qb->orderBy('col', false); // ORDER BY col DESC $qb->orderBy('col', 'DESC'); // ORDER BY col DESC # [col => ORD] 形式 $qb->orderBy(['colA' => 'ASC', 'colB' => false]); // ORDER BY colA ASC, colB DESC $qb->orderBy(['colA' => true, 'colB' => 'DESC']); // ORDER BY colA ASC, colB DESC $qb->orderBy(['colA', 'colB' => false]); // ORDER BY colA ASC, colB DESC # [+col, -col] 形式 $qb->orderBy('+colA'); // ORDER BY colA ASC $qb->orderBy(['-colA', '+colB']); // ORDER BY colA DESC, colB ASC # [col, col, col], ORD 形式 $qb->orderBy(['colA', 'colB', 'colC'], false); // ORDER BY colA DESC, colB DESC, colC DESC
Parameter
type name summary
$sort
$order = null
​?string $nullsOrder = null
Return
type summary
SelectBuilder

[m] addOrderBy [col => ASC] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::orderBy()")(追加版)

[col => ASC] のように指定できるように拡張した ryunosuke\dbml\Query\SelectBuilder::orderBy()(追加版)
public function addOrderBy( $sort, $order = null, ?string $nullsOrder = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$sort
$order = null
​?string $nullsOrder = null
Return
type summary
SelectBuilder

[m] limit (count, offset) or [offset => length] or [offset, length] のように指定できるようにする

(count, offset) or [offset => length] or [offset, length] のように指定できるようにする
public function limit( array|int|null $count, ?int $offset = null ): ryunosuke\dbml\Query\SelectBuilder

LIMIT OFFSET 句を設定する。

# シンプルにスカラーで指定 $qb->limit(10); // LIMIT 10 $qb->limit(10, 20); // LIMIT 10 OFFSET 20 # 配列で指定(単純引数でも連想配列でも指定できる)。意味合いがスカラー指定と逆になっているので注意 $qb->limit([20, 10]); // LIMIT 10 OFFSET 20 $qb->limit([20 => 10]); // LIMIT 10 OFFSET 20
Parameter
type name summary
​array|​int|​null $count
​?int $offset = null
Return
type summary
SelectBuilder

[m] page ページ単位として LIMIT OFFSET する

ページ単位として LIMIT OFFSET する
public function page( int $page, ?int $limit = null ): ryunosuke\dbml\Query\SelectBuilder

できることは ryunosuke\dbml\Query\SelectBuilder::limit() と同じ。指定の仕方が異なるだけ。 limit() は LIMIT, OFFSET をダイレクトに指定するが、こちらは一定の単位(ページ)で設定する。 「LIMIT ありきで、それを元に OFFSET する」とも言える。

ryunosuke\dbml\Query\Pagination\Paginator は全く関係ない

# 10 件ごと 5 ページ目を設定 $qb->page(5, 10); // LIMIT 10 OFFSET 50 # あらかじめ limit 設定しておけば第2引数は省略できる $qb->limit(10)->page(5); // LIMIT 10 OFFSET 50
Parameter
type name summary
​int $page
​?int $limit = null
Return
type summary
SelectBuilder

[m] comment クエリに対してコメントを付ける

クエリに対してコメントを付ける
public function comment( array|string $comment, string $clause = "" ): ryunosuke\dbml\Query\SelectBuilder

コメントはクエリ冒頭に改行付きで付与される。複数設定した場合はその分付与される。 コメント内に : や ? などのメタ的な文字列を含んではならない。

$clause で句を指定できるが内部向け。 現在のところ "select" だけが指定できる。

# 単一文字列は追加される echo $qb->column('test')->comment('hoge')->comment('fuga'); // -- hoge // -- fuga // SELECT * FROM test # 配列は置換される echo $qb->column('test')->comment('foo')->comment(['hoge', 'fuga']); // -- hoge // -- fuga // SELECT * FROM test # 配列は置換されるので削除も行える echo $qb->column('test')->comment([]); // SELECT * FROM test
Parameter
type name summary
​array|​string $comment
​string $clause = ""
Return
type summary
SelectBuilder

[m] union UNION する

UNION する
public function union($query): ryunosuke\dbml\Query\SelectBuilder

UNION を行うと「UNION テーブルから自身のクエリビルダを利用して SELECT する」という動作になる。 言い換えれば「自身の各句は UNION テーブルのためのものになる」となる。

$qb = $db->select([ // 後の union のための column 指定 '' => ['title', 'content'] ], [ // 後の union のための where 指定 'status' => 'active', ]); // t_article と t_comment を union する(これが駆動表となる) $qb->union($db->select('t_article')); $qb->union($db->select('t_comment')); echo $qb; // SELECT title, content FROM // ( // SELECT t_article.* FROM t_article // UNION // SELECT t_comment.* FROM t_comment // ) __dbml_union_table // WHERE status = 'active'
Parameter
type name summary
$query
Return
type summary
SelectBuilder

[m] unionAll UNION ALL する

UNION ALL する
public function unionAll($query): ryunosuke\dbml\Query\SelectBuilder

ALL で UNION される以外は ryunosuke\dbml\Query\SelectBuilder::union() と全く同じ。

Parameter
type name summary
$query
Return
type summary
SelectBuilder

[m] existize EXISTS クエリ化

EXISTS クエリ化
public function existize( bool $affirmation = true, bool $for_update = false ): ryunosuke\dbml\Query\SelectBuilder
# status: 'active' の EXISTS を発行する $qb->column('t_article')->where(['status' => 'active'])->existize(); // SELECT EXISTS(SELECT * FROM t_article WHERE status = 'active')
Parameter
type name summary
​bool $affirmation = true
​bool $for_update = false
Return
type summary
SelectBuilder

[m] countize COUNT(*) クエリ化(厳密に言えば limit なしの COUNT(*) 化)

COUNT(*) クエリ化(厳密に言えば limit なしの COUNT(*) 化)
public function countize(string $column = "*"): ryunosuke\dbml\Query\SelectBuilder
# status: 'active' の COUNT(*) を発行する $qb->column('t_article')->where(['status' => 'active'])->countize(); // SELECT COUNT(*) AS __dbml_auto_cnt FROM t_article WHERE status = 'active'
Parameter
type name summary
​string $column = "*"
Return
type summary
SelectBuilder

[m] paginate new Paginator へのプロキシメソッド

new Paginator へのプロキシメソッド
public function paginate( ?int|int $currentpage, ?int|int $countperpage ): ryunosuke\dbml\Query\Pagination\Paginator

引数が与えられている場合は ryunosuke\dbml\Query\Pagination\Paginator::paginate() も同時に行う。

Parameter
type name summary
​?int|​int $currentpage
​?int|​int $countperpage
Return
type summary
Paginator

[m] sequence new Sequencer へのプロキシメソッド

new Sequencer へのプロキシメソッド
public function sequence( ?array|array $condition, ?int|int $count, ?bool|bool $orderbyasc = true ): ryunosuke\dbml\Query\Pagination\Sequencer

引数が与えられている場合は ryunosuke\dbml\Query\Pagination\Sequencer::sequence() も同時に行う。

Parameter
type name summary
​?array|​array $condition
​?int|​int $count
​?bool|​bool $orderbyasc = true
Return
type summary
Sequencer

[m] chunk 分割して sequence してレコードジェネレータを返す

分割して sequence してレコードジェネレータを返す
public function chunk( int $chunk, ?string $column = null, $fixrange = false ): \Generator

例えば 150 件のレコードに対して chunk: 10 するとクエリを 15 回に分けて実行する。 そのそれぞれのクエリは別々であり、php 側 にも db 側にもバッファは作られないためメモリ効率が非常に良い(そのかわりそこまで高速ではない)。

一般的な実装と違い、下記の制限がある。

  • 数値主キーか、数値的な NOT NULL ユニークキーを持っている必要がある
  • あらかじめ設定していても ORDER BY, LIMIT は無視される

そのかわり chunk 内でレコードの更新を行ってもズレが発生しないようになっている。

// 100 件ずつループする foreach ($qb->where(['status' => 'active'])->chunk(100) as $row) { // do something var_dump($row['id']); } // SELECT * FROM t_table WHERE (status = "active") AND (id > 0) ORDER BY id ASC LIMIT 100 // SELECT * FROM t_table WHERE (status = "active") AND (id > 100) ORDER BY id ASC LIMIT 100 // SELECT * FROM t_table WHERE (status = "active") AND (id > 200) ORDER BY id ASC LIMIT 100 // ・・・のようなクエリが順次投げられる(Generator で返されるので分割されていることは意識しなくて良い)
Parameter
type name summary
​int $chunk
​?string $column = null
$fixrange = false
Return
type summary
Generator

[m] neighbor 特定レコードの前後のレコードを返す

特定レコードの前後のレコードを返す
public function neighbor( array $predicates, int $limit = 1 ): array

結果配列は特定レコードとの距離がキーになり、かつ昇順でソートされる。

# id:5 の前後のレコードを1行ずつ返す $qb->neighbor(['id' => 5]); // results: [ -1 => ['id' => 4], 1 => ['id' => 6], ]; # id:5 の前後のレコードを2行ずつ返す $qb->neighbor(['id' => 5], 2); // results: [ -2 => ['id' => 3], -1 => ['id' => 4], 1 => ['id' => 6], 2 => ['id' => 7], ]; # 前後が無い場合、無い方は含まれない $qb->neighbor(['id' => 99999], 2); // results: [ // 99999 より大きいレコードが無いとすると負数キー(前後の前)のみ返ってくる -2 => ['id' => 99997], -1 => ['id' => 99998], ];
Parameter
type name summary
​array $predicates
​int $limit = 1
Return
type summary
​array

[m] before fectch 後の処理を登録

fectch 後の処理を登録
public function before(?\Closure $callback = null): ryunosuke\dbml\Query\SelectBuilder

呼び出されるタイミングには下記の2種類がある。

before
ほぼ「SELECT クエリの直後」であり、サブビルダやクロージャの解決前
after
ほぼ「return 直前」であり、サブビルダやクロージャの解決後

引数は大本の行配列で、 $this は SelectBuilder で bind される。

Parameter
type name summary
​?Closure $callback = null
Return
type summary
SelectBuilder

[m] after fectch 後の処理を登録

fectch 後の処理を登録
public function after(?\Closure $callback = null): ryunosuke\dbml\Query\SelectBuilder

タイミング以外の仕様は ryunosuke\dbml\Query\SelectBuilder::before() と同じ。

Parameter
type name summary
​?Closure $callback = null
Return
type summary
SelectBuilder

[m] postselect 行フェッチ後に SelectBuilder 特有の処理を行う

行フェッチ後に SelectBuilder 特有の処理を行う
public function postselect( array $parents, bool $continuity = false ): array

ほぼ内部処理で明示的に呼ぶことはない。

Parameter
type name summary
​array $parents
​bool $continuity = false
Return
type summary
​array

[m] wrap 特定文字列でラップする

特定文字列でラップする
public function wrap( string $keyword1, string $keyword2 = "", ?string $name = null ): ryunosuke\dbml\Query\SelectBuilder

典型的には EXISTS だが、それ以外の「何らかの文字列で囲みたい」場合に汎用的に使用できる。 (もっとも、 EXISTS は専用メソッドが有るので使用頻度はそこまで高くない)。

ラップ文字は追加で積み重なっていくが、第3引数($name)を指定すると、種別を指定できて、後から上書きすることができる。

$qb->column('t_article')->wrap('A', 'B'); // A (SELECT t_article.* FROM t_article) B # 種別なしでラップ(積み重ね) $qb->column('t_article')->wrap('A', 'B')->wrap('C', 'D'); // C (A (SELECT t_article.* FROM t_article) B) D # 種別を hoge でラップ(上書き) $qb->column('t_article')->wrap('A', 'B', 'hoge')->wrap('C', 'D', 'hoge'); // C (SELECT t_article.* FROM t_article) D
Parameter
type name summary
​string $keyword1
​string $keyword2 = ""
​?string $name = null
Return
type summary
SelectBuilder

[m] exists EXISTS でラップして返す

EXISTS でラップして返す
public function exists(): ryunosuke\dbml\Query\SelectBuilder
Return
type summary
SelectBuilder

[m] notExists NOT EXISTS でラップして返す

NOT EXISTS でラップして返す
public function notExists(): ryunosuke\dbml\Query\SelectBuilder
Return
type summary
SelectBuilder

[m] aggregate 集約関数化する

集約関数化する
public function aggregate( array|string $aggregations, int $select_limit = ryunosuke\dbml\Query\PHP_INT_MAX ): ryunosuke\dbml\Query\SelectBuilder

ryunosuke\dbml\Database::aggregate() のためのヘルパーメソッドで、明示的には呼ばれないし呼ばない。

Parameter
type name summary
​array|​string $aggregations
​int $select_limit = ryunosuke\dbml\Query\PHP_INT_MAX
Return
type summary
SelectBuilder

[m] hint ヒント句を追加する

ヒント句を追加する
public function hint( ?string $hint, ?string $talias = null ): ryunosuke\dbml\Query\SelectBuilder

第2引数で紐づくテーブルを指定できるが、省略すると(その時点の)駆動表と紐づく。

RDBMS の方言は吸収しないのでダイレクトに与える必要がある。 (一応 ryunosuke\dbml\Metadata\CompatiblePlatform::getIndexHintSQL() に実装がある)。

// SELECT * FROM tablename FORCE INDEX (PRIMARY) $qb->column('tablename')->hint('FORCE INDEX (PRIMARY)');
Parameter
type name summary
​?string $hint
​?string $talias = null
Return
type summary
SelectBuilder

[m] lockInShare 共有ロック構文を付与する

共有ロック構文を付与する
public function lockInShare(string $lockoption = ""): ryunosuke\dbml\Query\SelectBuilder

$lockoption で付随するロックオプション(SKIP LOCKED とか)を指定できる(共有ロックで指定することはあまりないと思うけど)。 SKIP LOCKED などは有用だが方言がかなり激しく正規化が難しいので文字列で指定する。 ただし、 SqlServer は未対応(Doctrine 側が対応していない)。

# 共有ロック(mysql) $qb->column('t_article')->lockInShare(); // SELECT t_article.* FROM t_article LOCK IN SHARE MODE
Parameter
type name summary
​string $lockoption = ""
Return
type summary
SelectBuilder

[m] lockForUpdate 排他ロック構文を付与する

排他ロック構文を付与する
public function lockForUpdate(string $lockoption = ""): ryunosuke\dbml\Query\SelectBuilder

$lockoption で付随するロックオプション(SKIP LOCKED とか)を指定できる。 SKIP LOCKED などは有用だが方言がかなり激しく正規化が難しいので文字列で指定する。 ただし、 SqlServer は未対応(Doctrine 側が対応していない)。

# 排他ロック(mysql) $qb->column('t_article')->lockForUpdate(); // SELECT t_article.* FROM t_article FOR UPDATE # オプション付き排他ロック(postgres や mysql 8.0) $qb->column('t_article')->lockForUpdate('SKIP LOCKED'); // SELECT t_article.* FROM t_article FOR UPDATE SKIP LOCKED
Parameter
type name summary
​string $lockoption = ""
Return
type summary
SelectBuilder

[m] unlock ロックを解除する

ロックを解除する
public function unlock(): ryunosuke\dbml\Query\SelectBuilder

ryunosuke\dbml\Query\SelectBuilder::lockInShare()ryunosuke\dbml\Query\SelectBuilder::lockForUpdate() で追加したロック構文を解除する。

$qb->column('t_article'); # 排他ロック $qb->lockForUpdate(); // SELECT t_article.* FROM t_article FOR UPDATE # ロック解除 $qb->unlock(); // SELECT t_article.* FROM t_article
Return
type summary
SelectBuilder

[m] detectAutoOrder 自動 OrderBy の有効無効を設定する

自動 OrderBy の有効無効を設定する
public function detectAutoOrder(?bool $use): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​?bool $use
Return
type summary
SelectBuilder

[m] getSubbuilder サブクエリビルダを返す

サブクエリビルダを返す
public function getSubbuilder(?string $name = null): ryunosuke\dbml\Query\SelectBuilder|ryunosuke\dbml\Query\SelectBuilder[]
$select = $db->select('t_parent/t_child'); # t_child のサブクエリビルダを返す $select->getSubbuilder('t_child'); # 全サブクエリビルダを返す $select->getSubbuilder();

このメソッドでサブビルダを取得すると、テーブル記法や簡易記法で記述した子供ビルダに対して各句を指定することができる。

$qb->column([ 't_table' => [ 't_child AS children' => [], ], ]); $qb->getSubbuilder('children')->where(['delete_time' => 0])->orderBy(['update_time' => 'DESC'])->limit(5);
Parameter
type name summary
​?string $name = null
Return
type summary
SelectBuilder|​SelectBuilder[] サブクエリビルダ

[m] getFromPart FROM 句(from,join)を返す

FROM 句(from,join)を返す
public function getFromPart(): array

ryunosuke\dbml\Query\SelectBuilder::getQueryPart() でも得られるが、 FROM は JOIN も兼ねており、ややこしい構造になっているのでそれを補正しつつシンプルな構造で返す。

$qb->column('t_article A + t_comment C'); $qb->getFromPart(); // result: [ 'A' => [ 'from' => null, 'table' => 't_article', 'alias' => 'A', 'fkeyname' => null, 'condition' => [], ], 'C' => [ 'from' => 'A', 'table' => 't_comment', 'alias' => 'C', 'fkeyname' => null, 'condition' => null, 'type' => 'INNER', ], ];
Return
type summary
​array

[m] getQueryPart SQL の各句を返す

SQL の各句を返す
public function getQueryPart(?string $queryPartName): mixed
Parameter
type name summary
​?string $queryPartName
Return
type summary
​mixed

[m] resetQueryPart SQL の各句をリセットする

SQL の各句をリセットする
public function resetQueryPart(array|string|null $queryPartName = null): ryunosuke\dbml\Query\SelectBuilder

引数でリセットする句を指定する。 配列を与えると複数の句をリセットする。 null を与えると全句をリセットする。

$qb = $db->select('t_article', ['article_id' => 1], ['article_id' => 'DESC'], 5); # where をリセット $qb->resetQueryPart('where'); // SELECT t_article.* FROM t_article ORDER BY article_id DESC LIMIT 5 # limit をリセット $qb->resetQueryPart('limit'); // SELECT t_article.* FROM t_article ORDER BY article_id DESC # orderBy をリセット $qb->resetQueryPart('orderBy'); // SELECT t_article.* FROM t_article
Parameter
type name summary
​array|​string|​null $queryPartName = null
Return
type summary
SelectBuilder

[m] reset すべてを無に帰す

すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\SelectBuilder
Return
type summary
SelectBuilder

[m] cache このビルダとサブビルダにキャッシュするように指示する

このビルダとサブビルダにキャッシュするように指示する
public function cache(null|int|false $ttl = null): ryunosuke\dbml\Query\SelectBuilder

キャッシュはクエリ+パラメータで丸ごとキャッシュされる。

# このクエリは10秒間キャッシュされる $qb->cache(10)->column('t_article', ['state' => 'active'])->array();
Parameter
type name summary
​null|​int|​false $ttl = null キャッシュ期限(null はキャッシュドライバーのデフォルトに従う。false は解除)
Return
type summary
SelectBuilder

[m] getCacheTtl 内部向け

内部向け
public function getCacheTtl(): ?int
Return
type summary
​?int

[m] fetch 取得方法指定で Database にクエリを投げる

取得方法指定で Database にクエリを投げる
public function fetch( string $method, iterable $params = [] )

実際は下記のようなエイリアスメソッドが定義されているのでそちらを使うことが多く、明示的に呼ぶことはほとんどない。

Parameter
type name summary
​string $method
​iterable $params = []

[m] array

public function array(iterable $params = []): ryunosuke\dbml\Query\SelectBuilder|array|ryunosuke\dbml\Entity\Entityable[]
Parameter
type name summary
​iterable $params = []
Return
type summary
SelectBuilder|​array|​Entityable[]

[m] assoc レコードの配列を返す

レコードの配列を返す
public function assoc(iterable $params = [])
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchAssocWithoutSql() レコードの配列を返す

[m] lists レコードの配列を返す

レコードの配列を返す
public function lists(iterable $params = [])
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchListsWithoutSql() レコードの配列を返す

[m] pairs レコードの配列を返す

レコードの配列を返す
public function pairs(iterable $params = [])
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchPairsWithoutSql() レコードの配列を返す

[m] tuple レコードの配列を返す

レコードの配列を返す
public function tuple(iterable $params = [])
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchTupleWithoutSql() レコードの配列を返す

[m] value レコードの配列を返す

レコードの配列を返す
public function value(iterable $params = [])
$db->fetchArray('SELECT id, name FROM tablename'); // results: [ [ 'id' => 1, 'name' => 'name1', ], [ 'id' => 2, 'name' => 'name2', ], ];
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchMethodTrait::fetchValueWithoutSql() レコードの配列を返す

[m] fetchOrThrow

public function fetchOrThrow( string $method, iterable $params = [] )
Parameter
type name summary
​string $method
​iterable $params = []

[m] yield Yielder を返す

Yielder を返す
public function yield( ?int $chunk = null, ?string $method = null, iterable $params = [] ): ryunosuke\dbml\Generator\Yielder
Parameter
type name summary
​?int $chunk = null
​?string $method = null
​iterable $params = []
Return
type summary
Yielder

[m] getLazyMode 内部向け

内部向け
public function getLazyMode(): ?string
Return
type summary
​?string

[m] getLazyChunk 内部向け

内部向け
public function getLazyChunk(): ?int
Return
type summary
​?int

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string

[m] getParams パラメータを返す

パラメータを返す
public function getParams(?string $queryPartName = null): array
Parameter
type name summary
​?string $queryPartName = null
Return
type summary
​array

[m] _precondition WHERE/HAVING 条件を正規化する

WHERE/HAVING 条件を正規化する
protected function _precondition( array $tables, array $predicates ): array

where だけは select,affect の両方に出現し得る(厳密に言えば order や limit もだけど)のでここに定義してある。

Parameter
type name summary
​array $tables
​array $predicates
Return
type summary
​array
Prototype
kind source summary
​inherit AbstractBuilder::_precondition() WHERE/HAVING 条件を正規化する

[m] getDatabase

public function getDatabase(): ryunosuke\dbml\Database
Return
type summary
Database
Prototype
kind source summary
​inherit AbstractBuilder::getDatabase()

[m] bindInto ? 込みのキー名を正規化する

? 込みのキー名を正規化する
public function bindInto( $data, ?array &$params ): array|string

具体的には引数 $params に bind 値を格納して返り値として(? を含んだ)クエリ文字列を返す。

# 単純に文字列で渡す(あまり用途はない) $qb->bindInto('col', $params); // results: "?", $params: ['col'] # Queryable も渡せる $qb->bindInto(Expression::new('col', [1]), $params); // results: ['col1'], $params: [1] # 配列で渡す(混在可能。メイン用途) $qb->bindInto(['col1' => Expression::new('UPPER(?)', [1]), 'col2' => 2], $params); // results: ['col1' => 'UPPER(?)', 'col2' => '?'], $params: [1, 2]
Parameter
type name summary
$data
​?array &$params
Return
type summary
​array|​string
Prototype
kind source summary
​inherit AbstractBuilder::bindInto() ? 込みのキー名を正規化する

[m] prepare 現在のビルダの状態で固定して prepare する

現在のビルダの状態で固定して prepare する
public function prepare(): ryunosuke\dbml\Query\AbstractBuilder

「preparedStatement を返す」のではなく「prepare 状態にするだけ」なのに注意。 preparedStatement は ryunosuke\dbml\Query\AbstractBuilder::getPreparedStatement() で取得する。

$qb->column('t_article', ['state' => 'active', 'id = :id']); # 現在の状態で prepare する $qb->prepare(); // この段階では state: active は固定されているが、:id は未確定 $stmt = $qb->getPreparedStatement(); // ここで実行することで id: 1 がプリペアで実行される $stmt->executeSelect(['id' => 1]); // SELECT t_article.* FROM t_article WHERE (id = 1) AND (state = "active") // さらに続けてプリペアで id: 2 を実行できる $stmt->executeSelect(['id' => 2]); // SELECT t_article.* FROM t_article WHERE (id = 2) AND (state = "active")
Return
type summary
AbstractBuilder
Prototype
kind source summary
​inherit AbstractBuilder::prepare() 現在のビルダの状態で固定して prepare する

[m] getPreparedStatement prepare したステートメントを返す

prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
Return
type summary
​?Statement
Prototype
kind source summary
​inherit AbstractBuilder::getPreparedStatement() prepare したステートメントを返す

[m] queryInto パラメータを利用してクエリ化

パラメータを利用してクエリ化
public function queryInto(): string
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractBuilder::queryInto() パラメータを利用してクエリ化

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractBuilder::merge() パラメータをマージして文字列表現を返す

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​inherit AbstractBuilder::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​inherit AbstractBuilder::checkUnknownOption()

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[m] joinOn 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinOn( $table, $on, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
$on
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::joinOn() 結合方法が INNER で結合条件指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] joinForeign 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeign( $table, ?string $fkeyname = null, ?string $from = null ): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
$table
​?string $fkeyname = null
​?string $from = null
Return
type summary
SelectBuilder
Prototype
kind source summary
​instead JoinTrait::joinForeign() 結合方法が AUTO で外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] joinForeignOn 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()
public function joinForeignOn( $table, string|array $on = [], ?string $fkeyname = null, $from = null ): ryunosuke\dbml\Gateway\TableGateway
Parameter
type name summary
$table
​string|​array $on = [] 結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える
​?string $fkeyname = null 外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外)
$from = null
Return
type summary
TableGateway
Prototype
kind source summary
​instead JoinTrait::joinForeignOn() 結合方法が AUTO で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()")

[m] arrayOrThrow ryunosuke\dbml\Query\SelectBuilder::array()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::array() の例外送出版
public function arrayOrThrow(iterable $params = []): ryunosuke\dbml\Query\SelectBuilder|array|ryunosuke\dbml\Entity\Entityable[]
Parameter
type name summary
​iterable $params = []
Return
type summary
SelectBuilder|​array|​Entityable[]
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchArrayOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::array()") の例外送出版

[m] assocOrThrow ryunosuke\dbml\Query\SelectBuilder::assoc()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::assoc() の例外送出版
public function assocOrThrow(iterable $params = [])
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchAssocOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::assoc()") の例外送出版

[m] listsOrThrow ryunosuke\dbml\Query\SelectBuilder::lists()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::lists() の例外送出版
public function listsOrThrow(iterable $params = [])
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchListsOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::lists()") の例外送出版

[m] pairsOrThrow ryunosuke\dbml\Query\SelectBuilder::pairs()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::pairs() の例外送出版
public function pairsOrThrow(iterable $params = [])
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchPairsOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::pairs()") の例外送出版

[m] tupleOrThrow ryunosuke\dbml\Query\SelectBuilder::tuple()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::tuple() の例外送出版
public function tupleOrThrow(iterable $params = [])
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchTupleOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::tuple()") の例外送出版

[m] valueOrThrow ryunosuke\dbml\Query\SelectBuilder::value()") の例外送出版

ryunosuke\dbml\Query\SelectBuilder::value() の例外送出版
public function valueOrThrow(iterable $params = [])
Parameter
type name summary
​iterable $params = []
Prototype
kind source summary
​instead FetchOrThrowTrait::fetchValueOrThrowWithoutSql() ryunosuke\dbml\Query\SelectBuilder::value()") の例外送出版

[m] getDefaultLazyMode

public function getDefaultLazyMode(): string
Return
type summary
​string

[m] setDefaultLazyMode

public function setDefaultLazyMode(mixed $string): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $string
Return
type summary
SelectBuilder

[m] getDefaultScope

public function getDefaultScope(): array
Return
type summary
​array

[m] setDefaultScope

public function setDefaultScope(mixed $array): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $array
Return
type summary
SelectBuilder

[m] getDefaultOrder

public function getDefaultOrder(): mixed
Return
type summary
​mixed

[m] setDefaultOrder

public function setDefaultOrder(mixed $mixed): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $mixed
Return
type summary
SelectBuilder

[m] getPrimarySeparator

public function getPrimarySeparator(): string
Return
type summary
​string

[m] setPrimarySeparator

public function setPrimarySeparator(mixed $string): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $string
Return
type summary
SelectBuilder

[m] getAggregationDelimiter

public function getAggregationDelimiter(): string
Return
type summary
​string

[m] setAggregationDelimiter

public function setAggregationDelimiter(mixed $string): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $string
Return
type summary
SelectBuilder

[m] getArrayFetch

public function getArrayFetch(): string
Return
type summary
​string

[m] setArrayFetch

public function setArrayFetch(mixed $string): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $string
Return
type summary
SelectBuilder

[m] getNullsOrder

public function getNullsOrder(): string
Return
type summary
​string

[m] setNullsOrder

public function setNullsOrder(mixed $string = null): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $string = null
Return
type summary
SelectBuilder

[m] getPropagateLockMode

public function getPropagateLockMode(): int|Doctrine\DBAL\LockMode
Return
type summary
​int|​LockMode

[m] setPropagateLockMode

public function setPropagateLockMode(mixed $lockMode): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $lockMode
Return
type summary
SelectBuilder

[m] getInjectChildColumn

public function getInjectChildColumn(): bool
Return
type summary
​bool

[m] setInjectChildColumn これは phpstorm の as keyword が修正されたら不要になる

これは phpstorm の as keyword が修正されたら不要になる
public function setInjectChildColumn(mixed $bool): ryunosuke\dbml\Query\SelectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
SelectBuilder

[C] AbstractBuilder

Hierarchy

Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Stringable
Uses
type summary
DebugInfoTrait
OptionTrait オプションを保持し、get/set できるようにする trait

[p] $database

protected ryunosuke\dbml\Database $database

Type: Database

[p] $sql

protected string $sql

Type: string

[p] $params

protected array $params

Type: array

[p] $statement

protected ryunosuke\dbml\Query\Statement $statement

Type: Statement

[m] __construct

public function __construct(ryunosuke\dbml\Database $database)
Parameter
type name summary
Database $database

[m] _precondition WHERE/HAVING 条件を正規化する

WHERE/HAVING 条件を正規化する
protected function _precondition( array $tables, array $predicates ): array

where だけは select,affect の両方に出現し得る(厳密に言えば order や limit もだけど)のでここに定義してある。

Parameter
type name summary
​array $tables
​array $predicates
Return
type summary
​array

[m] getDatabase

public function getDatabase(): ryunosuke\dbml\Database
Return
type summary
Database

[m] bindInto ? 込みのキー名を正規化する

? 込みのキー名を正規化する
public function bindInto( $data, ?array &$params ): array|string

具体的には引数 $params に bind 値を格納して返り値として(? を含んだ)クエリ文字列を返す。

# 単純に文字列で渡す(あまり用途はない) $qb->bindInto('col', $params); // results: "?", $params: ['col'] # Queryable も渡せる $qb->bindInto(Expression::new('col', [1]), $params); // results: ['col1'], $params: [1] # 配列で渡す(混在可能。メイン用途) $qb->bindInto(['col1' => Expression::new('UPPER(?)', [1]), 'col2' => 2], $params); // results: ['col1' => 'UPPER(?)', 'col2' => '?'], $params: [1, 2]
Parameter
type name summary
$data
​?array &$params
Return
type summary
​array|​string

[m] prepare 現在のビルダの状態で固定して prepare する

現在のビルダの状態で固定して prepare する
public function prepare(): ryunosuke\dbml\Query\AbstractBuilder

「preparedStatement を返す」のではなく「prepare 状態にするだけ」なのに注意。 preparedStatement は ryunosuke\dbml\Query\AbstractBuilder::getPreparedStatement() で取得する。

$qb->column('t_article', ['state' => 'active', 'id = :id']); # 現在の状態で prepare する $qb->prepare(); // この段階では state: active は固定されているが、:id は未確定 $stmt = $qb->getPreparedStatement(); // ここで実行することで id: 1 がプリペアで実行される $stmt->executeSelect(['id' => 1]); // SELECT t_article.* FROM t_article WHERE (id = 1) AND (state = "active") // さらに続けてプリペアで id: 2 を実行できる $stmt->executeSelect(['id' => 2]); // SELECT t_article.* FROM t_article WHERE (id = 2) AND (state = "active")
Return
type summary
AbstractBuilder

[m] getPreparedStatement prepare したステートメントを返す

prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
Return
type summary
​?Statement

[m] queryInto パラメータを利用してクエリ化

パラメータを利用してクエリ化
public function queryInto(): string
Return
type summary
​string

[m] reset すべてを無に帰す

すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\AbstractBuilder
Return
type summary
AbstractBuilder

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::getQuery() クエリ文字列を返す

[m] getParams パラメータを返す

パラメータを返す
public function getParams(): array
Return
type summary
​array
Prototype
kind source summary
​implement Queryable::getParams() パラメータを返す

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::merge() パラメータをマージして文字列表現を返す

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​instead OptionTrait::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​instead OptionTrait::checkUnknownOption()

[m] __toString

abstract public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Stringable::__toString()

[C] Parser クエリをパースして本ライブラリの使用に足る情報を得るクラス

クエリをパースして本ライブラリの使用に足る情報を得るクラス

実際のところは doctrine のパースを利用してるので、?, :name をどう取得してどう返すか? を決め打ちしているだけである。 コンストラクタオプションでエラーレベルを指定できるが、実質的に指定することはない。 このオプションはロガーなどのエラーが出てはまずいような特殊な状況でしか使われない。 (パラメータ不足でエラーが出たのにそれをログろうとしてエラーになっていては本末転倒である)。

[C] ERROR_MODE_SILENT

public const int ERROR_MODE_SILENT = 0

[C] ERROR_MODE_WARNING

public const int ERROR_MODE_WARNING = 10

[C] ERROR_MODE_EXCEPTION

public const int ERROR_MODE_EXCEPTION = 20

[M] raiseMismatchParameter

public static function raiseMismatchParameter( $key, int $errorMode )
Parameter
type name summary
$key
​int $errorMode

[m] __construct

public function __construct( $original, int $errorMode = self::ERROR_MODE_EXCEPTION )
Parameter
type name summary
$original
​int $errorMode = self::ERROR_MODE_EXCEPTION

[m] convertPartialSQL クエリをプレースホルダー単位で分割する

クエリをプレースホルダー単位で分割する
public function convertPartialSQL(string $sql): array

汎用的に使う(わざわざ visitor を使わずにサクッとパースしたいことがある)。

Parameter
type name summary
​string $sql
Return
type summary
​array

[m] convertNamedSQL クエリを名前付きプレースホルダーに統一する

クエリを名前付きプレースホルダーに統一する
public function convertNamedSQL( string $sql, iterable &$params ): string

位置プレースホルダが足りなかったり多かったりしたら例外を投げる。 元からある名前付きプレースホルダーには言及しない。もしあってもそのまま追加される。

Parameter
type name summary
​string $sql
​iterable &$params
Return
type summary
​string

[m] convertPositionalSQL クエリを位置プレースホルダーに統一する

クエリを位置プレースホルダーに統一する
public function convertPositionalSQL( string $sql, iterable &$params, ?array &$paramMap = [], ?callable $callback = null ): string

名前付きプレースホルダが足りなかったり多かったりしたら例外を投げる。 元からある位置プレースホルダーには言及しない。もしあってもそのまま追加される。

1つのプレースホルダーが複数に対応することもあるので呼び元で適宜 $paramMap を使って読み替えなければならない。 $callback で位置記号のコールバックを指定できるが、普通は ? で十分であり、指定するのは実質的に PostgreSql 専用。

Parameter
type name summary
​string $sql
​iterable &$params
​?array &$paramMap = []
​?callable $callback = null
Return
type summary
​string

[m] convertDollarSQL

public function convertDollarSQL( string $sql, iterable &$params, ?array &$paramMap = [] )
Parameter
type name summary
​string $sql
​iterable &$params
​?array &$paramMap = []
See
type summary
Parser::convertPositionalSQL()

[m] convertQuotedSQL クエリのプレースホルダーに値を埋め込んで完全なクエリにする

クエリのプレースホルダーに値を埋め込んで完全なクエリにする
public function convertQuotedSQL( string $sql, iterable $params, callable $quoter ): string

プレースホルダの数や種類が完全に一致していないと例外を投げる。

値の埋め込みは本質的に危険なので避けるべきだが、一部の内部処理や代替がない場合に埋め込む必要性が稀にある。

Parameter
type name summary
​string $sql
​iterable $params
​callable $quoter
Return
type summary
​string

[C] TableDescriptor テーブル記法の実装クラス

テーブル記法の実装クラス

テーブル記法の概念については dbml を参照。 なお、内部的に使用されるだけで能動的に new したり活用されたりするようなクラスではない。

下記に記法としての定義を記載する。組み合わせた場合の使用例は ryunosuke\dbml\Query\SelectBuilder::column() を参照。

'(joinsign)tablename(pkval)@scope:fkeyname[condition]<groupby>+order-by#offset-limit AS Alias.col1, col2 AS C2'

要素 必須 説明
joinsign 任意 JOIN する場合に結合方法を表す記号を置く('*':CROSS, '+':INNER, '<':LEFT, '>':RIGHT, '~':AUTO, ',':FROM)
tablename 必須 取得するテーブル名を指定する
(pkval) 任意 主キーの値を指定する
@scope 任意 対応する Gateway がありかつ scope というスコープが定義されているならそのスコープを当てる(複数可)
:fkeyname 任意 JOIN に使用する外部キー名を指定する
[condition] 任意 絞り込み条件を paml で指定する(where 記法)
condition 任意 絞り込み条件を paml で指定する(カラム結合)
<groupby> 任意 GROUP BY を指定する
+order-by 任意 ORDER BY を指定する
#offset-limit 任意 LIMIT, OFFSET を指定する
AS Alias 任意 テーブルエイリアスを指定する
.col1, col2 AS C2 任意 取得するカラムを指定する

joinsign

テーブルのプレフィックスとして *+<>~, を付けて JOIN を表す。 他に特記事項はない。

tablename

テーブル名を表す。 他に特記事項はない。

(pkval)

"()" 内で主キーの値を指定する。WHERE IN 化される。 主キーはカンマ区切りで複数指定できる。また、 "()" をネストすることで行値式相当の動作になる。

  • e.g. tablename(1)WHERE pid IN (1) となる)
  • e.g. tablename(1, 2)WHERE pid IN (1, 2) となる)
  • e.g. tablename((1, 2), (3, 4))WHERE (mainid = 1 AND subid = 2) OR (mainid = 3 AND subid = 4) となる)

※ 行値式は対応していない RDBMS やインデックスが使われない RDBMS が存在するため一律 AND OR で構築される

@scope

テーブルのサフィックスとして @ を付けてスコープを表す。 関連するゲートウェイクラスが存在しかつ指定されたスコープが定義されていなければならない。

@を連続することで複数のスコープを当てることができる。

  • e.g. tablename@scope1@scope2 (scope1 と scope2 を当てる)

@ だけを付けるとデフォルトスコープを表す(あくまでゲートウェイとは別概念なのでデフォルトスコープと言えど明示的に与えなければならない)。

  • e.g. tablename@ (デフォルトスコープを当てる)
  • e.g. tablename@@scope (デフォルトスコープと scope スコープを当てる)

@scope(1, 2) とすることでパラメータ付きスコープの引数になる。

  • e.g. tablename@latest(5) (最新5件のようなスコープ)

:fkeyname

テーブルのサフィックスとして : を付けて外部キーを表す。 テーブル間外部キーが1つなら指定しなくても自動で使用される。 ただし、空文字を指定すると「外部キーを使用しない」を表す。

  • e.g. tablename:fkname (結合条件として外部キーカラムが使用される)
  • e.g. tablename (同じ。テーブル間外部キーが1つならそれが指定されたとみなされる)
  • e.g. tablename: (外部キー結合なし)

[condition]

テーブルのサフィックスとして paml 記法で絞り込み条件を表す。 駆動表に設定されている場合はただの WHERE 条件として働く。 結合表に設定されている場合は ON 条件として働く。

  • e.g. tablename[id: 1, delete_flg = 0]id = 1 AND delete_flg = 0 となる(where 記法と同じ))

condition

テーブルのサフィックスとして paml 記法で絞り込み条件を表す。

  • e.g. tablename{selfid: otherid}selfid = otherid となる(カラムで結合する))

テーブルのサフィックスとして で GROUP BY を表す。 キーを指定すると HAVING として扱われる。

  • e.g. tablename<id>GROUP BY id となる)
  • e.g. tablename<year, month>GROUP BY year, month となる)
  • e.g. tablename<year, month, "COUNT(*)>?" => 1>GROUP BY year, month HAVING COUNT(*)>1 となる)

+order-by

テーブルのサフィックスとして [+-]columnname で ORDER BY を表す。 "+" プレフィックスで昇順、 "-" プレフィックスで降順を表す。各指定の明確な区切りはない(≒[+-] のどちらかは必須)。

  • e.g. tablename+idORDER BY id ASC となる)
  • e.g. tablename-create_date+idORDER BY create_date DESC, id ASC となる)

#offset-limit

テーブルのサフィックスとして #M-N で取得件数を表す。 M は省略可能。 単純な LIMIT OFFSET ではない。言うなれば「範囲指定」のようなもので、例えば "#40-50" は LIMIT 10 OFFSET 40 を表す。 つまり、「40件目から50-1件目」を表す(M はそのまま OFFSET に、 N - M が LIMIT になる)。 さらに、-N を省略した場合は「LIMIT 1 OFFSET M」を意味する。つまり単純な1行を指すことになる。 さらにさらに、M を省略した場合は 0 が補填される。クエリ的には OFFSET が設定されないことになる。 さらにさらにさらにこの指定は駆動表にのみ設定される(JOIN の LIMIT はサブクエリになり効率的ではないし、そもそも利用頻度が少ない)。

  • e.g. tablename#150-200LIMIT 50 OFFSET 150 となり範囲を表す)
  • e.g. tablename#100LIMIT 1 OFFSET 100 となり単一の1行を表す)
  • e.g. tablename#-100LIMIT 100 となる(M を省略した場合、 OFFSET は設定されない))

AS Alias

テーブルにエイリアスをつける。 AS は省略して tablename T でも良い。

.col1, col2 AS C2

取得するカラムリストを表す。カラムは直近のテーブル(エイリアス)で修飾される。 カンマ区切りで複数指定可能。 各カラムに対して AS aliasname とすることでエイリアスを表す(AS は省略可能)。

  • e.g. tablename.colA (colA を取得)
  • e.g. tablename.colA, colB CB (colA, colB(エイリアス CB) を取得)

コメント

一部の記法はコメントを受け入れる。例えば下記は valid なテーブル記法である(php の doccoment の仕様上 \ でエスケープしてあるが本来は不要)。

  • /* this is query comment *\/tablename/* this is table comment *\/@scope:fkeyname[condition]

今のところ冒頭で全体のコメントのみ対応している(↑の table comment は実装の名残だが、そのうち対応する)。 これを利用して SQL にコメントを埋め込んだりオプティマイザヒントを記述することができる(ただし、これらをどう使用するかはこのクラスでは言及しない)。


+order-by と #offset-limit は下記のように非常に相性が良い。

  • tablename-create_date#0 (作成日降順で1件取得)

(pkval), @scope, :fkeyname, [condition], +order-by, #offset-limit に順番の規則はないので任意に入れ替えることができる。 つまり、下記はすべて同じ意味となる(全組み合わせはとんでもない数になるので一部(:fkeyname, [condition] など)のみ列挙)。

  • tablename@scope:fkeyname[condition]
  • tablename@scope[condition]:fkeyname
  • tablename:fkeyname@scope[condition]
  • tablename:fkeyname[condition]@scope
  • tablename[condition]@scope:fkeyname
  • tablename[condition]:fkeyname@scope

ただし、 @scope(スコープ引数) と (pkval) の記法が重複しているため注意。 例えば @scope(1, 2) これは「引数つきスコープ」なのか「引数なしスコープの後に (pkval)が来ている」のか区別ができない。 見た目的な意味(あたかも関数コールのように見えて美しい)でも (pkval) はテーブル名の直後に置くのが望ましい。

また、 paml の中にまでは言及しないため、 "#" や "@" 等がリテラル内にある場合は誤作動を引き起こす。 構文解析までするのは仰々しいため、仕方のない仕様として許容する。

なお、テーブル記法に決してユーザ入力を埋め込んではならない (pkval) などは埋め込みたくなるが、テーブル記法は値のエスケープなどを一切行わないので致命的な脆弱性となりうる。

[C] META_CHARACTORS テーブル記法を表すメタ文字

テーブル記法を表すメタ文字
public const string[] META_CHARACTORS = ["(", ")", "@", "[", "]", "{", "}", "+", "-", "#", ".", " "]

[p] $descriptor

public mixed $descriptor

Type: mixed

[p] $comment

public string $comment

Type: string

[p] $joinsign

public string $joinsign

Type: string

[p] $table

public string $table

Type: string

[p] $alias

public string $alias

Type: string

[p] $jointable

public ryunosuke\dbml\Query\TableDescriptor[] $jointable

Type: TableDescriptor[]

[p] $scope

public array $scope

Type: array

[p] $condition

public array $condition

Type: array

[p] $fkeyname

public string $fkeyname

Type: string

[p] $group

public array $group

Type: array

[p] $having

public array $having

Type: array

[p] $order

public array $order

Type: array

[p] $offset

public int $offset

Type: int

[p] $limit

public int $limit

Type: int

[p] $column

public array $column

Type: array

[p] $key

public string $key

Type: string

[p] $remaining

public string $remaining

Type: string

[p] $jointype

public string $jointype

Type: string

[p] $accessor

public string $accessor

Type: string

[p] $fkeysuffix

public string $fkeysuffix

Type: string

[M] forge 文字列や配列からインスタンスの配列を生成する

文字列や配列からインスタンスの配列を生成する
public static function forge( ryunosuke\dbml\Database $database, array|string $descriptor, array|string $columnIfString = ["*"] ): ryunosuke\dbml\Query\TableDescriptor[]
Parameter
type name summary
Database $database
​array|​string $descriptor
​array|​string $columnIfString = ["*"]
Return
type summary
TableDescriptor[] 自身の配列

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, string $descriptor, $cols )
Parameter
type name summary
Database $database
​string $descriptor
$cols

[m] __get

public function __get(string $name): mixed
Parameter
type name summary
​string $name
Return
type summary
​mixed

[m] __set

public function __set( string $name, mixed $value )
Parameter
type name summary
​string $name
​mixed $value

[m] bind パラメータを bind(というか埋め込み)

パラメータを bind(というか埋め込み)
public function bind( ryunosuke\dbml\Database $database, array $params ): ryunosuke\dbml\Query\TableDescriptor

要素の ? を $params の値で置き換える。 エスケープは行われないし可変配列も未対応。 稀に「埋め込みがつらい文字列がある時に後から埋め込める」程度の機能。

今のところ用途の多い condition のみ。 いずれ拡張するにしても全うなクエリ順にする見込み。

Parameter
type name summary
Database $database
​array $params
Return
type summary
TableDescriptor

[C] Statement Statement をラップして扱いやすくしたクラス

Statement をラップして扱いやすくしたクラス

主にプリペアドステートメントのために存在する。よってエミュレーションモードがオンだとほとんど意味を為さない。 が、 ryunosuke\dbml\Database::insert()ryunosuke\dbml\Database::update() などはそれ自体にそれなりの付随処理があるので、使うことに意味がないわけではない。

クエリビルダは疑問符プレースホルダが大量に埋め込まれる可能性があるので、全部パラメータにするのが大変。 ので、「prepare した時点で固定し、残り(名前付き)のみ後から指定する」という仕様になっている。

$qb = $db->select('t_table.*', [':id', 'opt1' => 1, 'opt2' => 2])->prepare(); // :id は解決していないため、パラメータで渡すことができる(下記はエミュレーションモードがオフなら『本当の』プリペアドステートメントで実行される) $qb->array(['id' => 100]); // SELECT t_table.* FROM t_table WHERE id = 100 AND opt1 = 1 AND opt2 = 2 $qb->array(['id' => 101]); // SELECT t_table.* FROM t_table WHERE id = 101 AND opt1 = 1 AND opt2 = 2 $qb->array(['id' => 102]); // SELECT t_table.* FROM t_table WHERE id = 102 AND opt1 = 1 AND opt2 = 2

上記のように ":id" という形で「キー無しでかつ :から始まる要素」は利便性のため ['id = :id'] のように展開される。 普通の条件式では通常の値バインドと区別する必要があるので注意(['id > ?' => ':id'] だと WHERE id > ? = ":id" というただの文字列の WHERE になる)。

Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Uses
type summary
DebugInfoTrait

[m] __construct

public function __construct( string $query, iterable $params, ryunosuke\dbml\Database $database )
Parameter
type name summary
​string $query
​iterable $params
Database $database

[m] executeSelect 取得系クエリとして実行する

取得系クエリとして実行する
public function executeSelect( iterable $params = [], ?Doctrine\DBAL\Connection $connection = null ): Doctrine\DBAL\Result
Parameter
type name summary
​iterable $params = []
​?Connection $connection = null
Return
type summary
Result

[m] executeAffect 更新系クエリとして実行する

更新系クエリとして実行する
public function executeAffect( iterable $params = [], ?Doctrine\DBAL\Connection $connection = null ): int
Parameter
type name summary
​iterable $params = []
​?Connection $connection = null
Return
type summary
​int

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::getQuery() クエリ文字列を返す

[m] getParams パラメータを返す

パラメータを返す
public function getParams(): array
Return
type summary
​array
Prototype
kind source summary
​implement Queryable::getParams() パラメータを返す

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::merge() パラメータをマージして文字列表現を返す

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[C] AffectBuilder AFFECT ビルダークラス

AFFECT ビルダークラス

現在のところは内部向けであり、このクラスを用いて何らかのクエリを生成するのは非推奨。

Hierarchy

Parents
type summary
AbstractBuilder
Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Stringable
Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait

[p] $table

protected ?string $table = null

Type: ?string

[p] $alias

protected ?string $alias = null

Type: ?string

[p] $constraint

protected ?string $constraint = null

Type: ?string

[p] $set

protected array $set = []

Type: array

[p] $merge

protected array $merge = []

Type: array

[p] $column

protected array $column = []

Type: array

[p] $values

protected array $values = []

Type: array

[p] $select

protected ?string $select = null

Type: ?string

[p] $where

protected array $where = []

Type: array

[p] $condition

protected ?ryunosuke\dbml\Query\Clause\Where $condition = null

Type: ?Where

[p] $groupBy

protected array $groupBy = []

Type: array

[p] $having

protected array $having = []

Type: array

[p] $orderBy

protected array $orderBy = []

Type: array

[p] $limit

protected ?int $limit = null

Type: ?int

[p] $autoIncrementSeq

protected bool $autoIncrementSeq = false

Type: bool

[p] $affectedRows

protected null $affectedRows = null

Type: null

[p] $database

protected ryunosuke\dbml\Database $database

Type: Database

Prototype
kind source summary
​inherit AbstractBuilder::$database

[p] $sql

protected string $sql

Type: string

Prototype
kind source summary
​inherit AbstractBuilder::$sql

[p] $params

protected array $params

Type: array

Prototype
kind source summary
​inherit AbstractBuilder::$params

[p] $statement

protected ryunosuke\dbml\Query\Statement $statement

Type: Statement

Prototype
kind source summary
​inherit AbstractBuilder::$statement

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override AbstractBuilder::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] __toString

public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[m] build

public function build( array $queryParts, bool $append = false ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​array $queryParts
​bool $append = false
Return
type summary
AffectBuilder

[m] wildUpdate

public function wildUpdate( array $updateData, array $insertData, bool $useReference ): array
Parameter
type name summary
​array $updateData
​array $insertData
​bool $useReference
Return
type summary
​array

[m] normalize

public function normalize($row): array
Parameter
type name summary
$row
Return
type summary
​array

[m] tableAs

public function tableAs(): string
Return
type summary
​string

[m] restrictWheres

public function restrictWheres(string $event): array
Parameter
type name summary
​string $event
Return
type summary
​array

[m] cascadeValues

public function cascadeValues(Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey): array
Parameter
type name summary
ForeignKeyConstraint $fkey
Return
type summary
​array

[m] cascadeWheres

public function cascadeWheres(Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey): array
Parameter
type name summary
ForeignKeyConstraint $fkey
Return
type summary
​array

[m] loadCsv

public function loadCsv( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $column = null, $rows = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$column = null
$rows = null
​array $opt = []
Return
type summary
AffectBuilder

[m] insertSelect

public function insertSelect( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $sql = null, $columns = [], array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$sql = null
$columns = []
​array $opt = []
Return
type summary
AffectBuilder

[m] insertArray

public function insertArray( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $data = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$data = null
​array $opt = []
Return
type summary
AffectBuilder

[m] updateArray

public function updateArray( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $data = null, $where = [], array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$data = null
$where = []
​array $opt = []
Return
type summary
AffectBuilder

[m] modifyArray

public function modifyArray( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $insertData = null, $updateData = [], $uniquekey = "", array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$insertData = null
$updateData = []
$uniquekey = ""
​array $opt = []
Return
type summary
AffectBuilder

[m] insert

public function insert( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $data = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$data = null
​array $opt = []
Return
type summary
AffectBuilder

[m] update

public function update( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $data = null, $where = [], array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$data = null
$where = []
​array $opt = []
Return
type summary
AffectBuilder

[m] replace

public function replace( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $data = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$data = null
​array $opt = []
Return
type summary
AffectBuilder

[m] modify

public function modify( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $insertData = null, $updateData = [], $uniquekey = "", array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$insertData = null
$updateData = []
$uniquekey = ""
​array $opt = []
Return
type summary
AffectBuilder

[m] duplicate

public function duplicate( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, array $overrideData = [], $where = [], $sourceTable = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
​array $overrideData = []
$where = []
$sourceTable = null
​array $opt = []
Return
type summary
AffectBuilder

[m] delete

public function delete( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $where = [], array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$where = []
​array $opt = []
Return
type summary
AffectBuilder

[m] reduce

public function reduce( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, $limit = null, $orderBy = [], $groupBy = [], $where = [], array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
$limit = null
$orderBy = []
$groupBy = []
$where = []
​array $opt = []
Return
type summary
AffectBuilder

[m] truncate

public function truncate( ryunosuke\dbml\Query\TableDescriptor|ryunosuke\dbml\Gateway\TableGateway|string|null $table = null, array $opt = [] ): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
TableDescriptor|​TableGateway|​string|​null $table = null
​array $opt = []
Return
type summary
AffectBuilder

[m] execute

public function execute()

[m] getTable

public function getTable(): ?string
Return
type summary
​?string

[m] getAlias

public function getAlias(): ?string
Return
type summary
​?string

[m] getConstraint

public function getConstraint(): ?string
Return
type summary
​?string

[m] getSet

public function getSet(): array
Return
type summary
​array

[m] getMerge

public function getMerge(): array
Return
type summary
​array

[m] getColumn

public function getColumn(): array
Return
type summary
​array

[m] getSelect

public function getSelect(): ?string
Return
type summary
​?string

[m] getValues

public function getValues(): array
Return
type summary
​array

[m] getWhere

public function getWhere(): array
Return
type summary
​array

[m] getCondition

public function getCondition(): ?ryunosuke\dbml\Query\Clause\Where
Return
type summary
​?Where

[m] getGroupBy

public function getGroupBy(): array
Return
type summary
​array

[m] getHaving

public function getHaving(): array
Return
type summary
​array

[m] getOrderBy

public function getOrderBy(): array
Return
type summary
​array

[m] getLimit

public function getLimit(): ?int
Return
type summary
​?int

[m] getAutoIncrementSeq

public function getAutoIncrementSeq()

[m] getAffectedRows

public function getAffectedRows()

[m] reset すべてを無に帰す

すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\AffectBuilder
Return
type summary
AffectBuilder
Prototype
kind source summary
​override AbstractBuilder::reset() すべてを無に帰す

[m] __construct

public function __construct(ryunosuke\dbml\Database $database)
Parameter
type name summary
Database $database
Prototype
kind source summary
​inherit AbstractBuilder::__construct()

[m] _precondition WHERE/HAVING 条件を正規化する

WHERE/HAVING 条件を正規化する
protected function _precondition( array $tables, array $predicates ): array

where だけは select,affect の両方に出現し得る(厳密に言えば order や limit もだけど)のでここに定義してある。

Parameter
type name summary
​array $tables
​array $predicates
Return
type summary
​array
Prototype
kind source summary
​inherit AbstractBuilder::_precondition() WHERE/HAVING 条件を正規化する

[m] getDatabase

public function getDatabase(): ryunosuke\dbml\Database
Return
type summary
Database
Prototype
kind source summary
​inherit AbstractBuilder::getDatabase()

[m] bindInto ? 込みのキー名を正規化する

? 込みのキー名を正規化する
public function bindInto( $data, ?array &$params ): array|string

具体的には引数 $params に bind 値を格納して返り値として(? を含んだ)クエリ文字列を返す。

# 単純に文字列で渡す(あまり用途はない) $qb->bindInto('col', $params); // results: "?", $params: ['col'] # Queryable も渡せる $qb->bindInto(Expression::new('col', [1]), $params); // results: ['col1'], $params: [1] # 配列で渡す(混在可能。メイン用途) $qb->bindInto(['col1' => Expression::new('UPPER(?)', [1]), 'col2' => 2], $params); // results: ['col1' => 'UPPER(?)', 'col2' => '?'], $params: [1, 2]
Parameter
type name summary
$data
​?array &$params
Return
type summary
​array|​string
Prototype
kind source summary
​inherit AbstractBuilder::bindInto() ? 込みのキー名を正規化する

[m] prepare 現在のビルダの状態で固定して prepare する

現在のビルダの状態で固定して prepare する
public function prepare(): ryunosuke\dbml\Query\AbstractBuilder

「preparedStatement を返す」のではなく「prepare 状態にするだけ」なのに注意。 preparedStatement は ryunosuke\dbml\Query\AbstractBuilder::getPreparedStatement() で取得する。

$qb->column('t_article', ['state' => 'active', 'id = :id']); # 現在の状態で prepare する $qb->prepare(); // この段階では state: active は固定されているが、:id は未確定 $stmt = $qb->getPreparedStatement(); // ここで実行することで id: 1 がプリペアで実行される $stmt->executeSelect(['id' => 1]); // SELECT t_article.* FROM t_article WHERE (id = 1) AND (state = "active") // さらに続けてプリペアで id: 2 を実行できる $stmt->executeSelect(['id' => 2]); // SELECT t_article.* FROM t_article WHERE (id = 2) AND (state = "active")
Return
type summary
AbstractBuilder
Prototype
kind source summary
​inherit AbstractBuilder::prepare() 現在のビルダの状態で固定して prepare する

[m] getPreparedStatement prepare したステートメントを返す

prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
Return
type summary
​?Statement
Prototype
kind source summary
​inherit AbstractBuilder::getPreparedStatement() prepare したステートメントを返す

[m] queryInto パラメータを利用してクエリ化

パラメータを利用してクエリ化
public function queryInto(): string
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractBuilder::queryInto() パラメータを利用してクエリ化

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractBuilder::getQuery() クエリ文字列を返す

[m] getParams パラメータを返す

パラメータを返す
public function getParams(): array
Return
type summary
​array
Prototype
kind source summary
​inherit AbstractBuilder::getParams() パラメータを返す

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractBuilder::merge() パラメータをマージして文字列表現を返す

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​inherit AbstractBuilder::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​inherit AbstractBuilder::checkUnknownOption()

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[m] getInsertSet

public function getInsertSet(): bool
Return
type summary
​bool

[m] setInsertSet

public function setInsertSet(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getUpdateEmpty

public function getUpdateEmpty(): bool
Return
type summary
​bool

[m] setUpdateEmpty

public function setUpdateEmpty(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getDefaultInvalidColumn

public function getDefaultInvalidColumn(): array
Return
type summary
​array

[m] setDefaultInvalidColumn

public function setDefaultInvalidColumn(mixed $array): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $array
Return
type summary
AffectBuilder

[m] getFilterNoExistsColumn

public function getFilterNoExistsColumn(): bool
Return
type summary
​bool

[m] setFilterNoExistsColumn

public function setFilterNoExistsColumn(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getFilterNullAtNotNullColumn

public function getFilterNullAtNotNullColumn(): bool
Return
type summary
​bool

[m] setFilterNullAtNotNullColumn

public function setFilterNullAtNotNullColumn(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getConvertEmptyToNull

public function getConvertEmptyToNull(): bool
Return
type summary
​bool

[m] setConvertEmptyToNull

public function setConvertEmptyToNull(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getConvertBoolToInt

public function getConvertBoolToInt(): bool
Return
type summary
​bool

[m] setConvertBoolToInt

public function setConvertBoolToInt(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getConvertNumericToDatetime

public function getConvertNumericToDatetime(): bool
Return
type summary
​bool

[m] setConvertNumericToDatetime

public function setConvertNumericToDatetime(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[m] getConvertArrayToJson

public function getConvertArrayToJson(): null|int
Return
type summary
​null|​int

[m] setConvertArrayToJson

public function setConvertArrayToJson($json_encode_flags): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
$json_encode_flags
Return
type summary
AffectBuilder

[m] getConvertObjectToJson

public function getConvertObjectToJson(): null|int
Return
type summary
​null|​int

[m] setConvertObjectToJson

public function setConvertObjectToJson($json_encode_flags): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
$json_encode_flags
Return
type summary
AffectBuilder

[m] getTruncateString

public function getTruncateString(): bool
Return
type summary
​bool

[m] setTruncateString

public function setTruncateString(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
Parameter
type name summary
​mixed $bool
Return
type summary
AffectBuilder

[I] Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース

クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース

Hierarchy

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
abstract public function getQuery(): string
Return
type summary
​string

[m] getParams パラメータを返す

パラメータを返す
abstract public function getParams(): array
Return
type summary
​array

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
abstract public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string

[N] ryunosuke\dbml\Query\Clause\

[C] AbstractClause 抽象共通クラス

抽象共通クラス

現在のところマーカー的利用だけで何の制約も設けていない(インターフェースの方がいいかも)。

Hierarchy

[C] Having HAVING 句クラス

HAVING 句クラス

Hierarchy

Parents
type summary
AbstractCondition WHERE/HAVING 句の抽象共通クラス
AbstractClause 抽象共通クラス

[M] build 条件を正規化する

条件を正規化する
public static function build( ryunosuke\dbml\Database $database, array $predicate, ?array &$params = null, string $andor = "OR", ?bool &$filterd = null ): array

基本的に配列を与えることが多いが、値はエスケープされるがキーは一切触らずスルーされるためキーには決してユーザ由来の値を渡してはならない また、トップレベル以下の下層に配列が来ても連想配列とはみなされない(キーを使用しない or 連番で振り直す)。

# bad(トップレベルのキーにユーザ入力が渡ってしまう) Where::and($_GET); # better(少なくともトップレベルのキーにユーザ入力が渡ることはない) Where::and([ 'colA' => $_GET['colA'], 'colB' => $_GET['colB'], ]);
No predicates result 説明
0 '' - 値が(phpで)空判定される場合、その条件はスルーされる。空とは null || '' || [] || 全てが!で除外された SelectBuilder のこと
1 'hoge = 1' hoge = 1 ['hoge = 1'] と同じ。単一文字列指定は配列化される
2 ['hoge = 1'] hoge = 1 キーを持たないただの配列はそのまま条件文になる
3 ['hoge = ?' => 1] hoge = 1 キーに ? を含む配列は普通に想起されるプリペアードステートメントになる
4 ['hoge = ? OR fuga = ?' => [1, 2]] hoge = 1 OR fuga = 2 キーに ? を複数含む配列はパラメータがそれぞれのプレースホルダにバインドされる
5 ['hoge' => 1] hoge = 1 キーに ? を含まない [キー => 値] はキーがカラム名、値が bind 値とみなして = で結合される
6 ['hoge' => null] hoge IS NULL 上記と同じだが、値が null の場合は IS NULL 指定とみなす
7 ['hoge' => [1, 2, 3]] hoge IN (1, 2, 3) 上上記と同じだが、値が配列の場合は IN 指定とみなす
8 ['hoge' => []] hoge IN (NULL) 値が空配列の場合は IN(NULL) になる(DBMSにもよるが、実質的には FALSE と同義)
9 ['hoge:LIKE' => 'xxx'] hoge LIKE ('xxx') :演算子を付与するとその演算子で比較が行われる
10 ['hoge:!LIKE' => 'xxx'] NOT (hoge LIKE ('xxx')) : で演算子を明示しかつ ! を付与すると全体として NOT で囲まれる
11 ['hoge:!' => 'xxx'] NOT (hoge = 'xxx') : 以降がない場合はNo.5~8 とみなすその否定なので NOT = になる
15 [':hoge'] hoge = :hoge :hoge のようにコロンで始まる要素は 'hoge = :hoge' に展開される(prepare の利便性が上がる)
21 ['(hoge, fuga)'] => [[1, 2], [3, 4]] (hoge, fuga) IN ((1, 2), (3, 4)) 行値式のようなキーは IN に展開される
22 ['!hoge' => ''] - キーが "!" で始まるかつ bind 値が(phpで)空判定される場合、その条件文自体が抹消される(記号は同じだが前述の :!演算子 とは全く別個)
23 ['AND/OR' => ['hoge' => 1, 'fuga' => 2]] hoge = 1 OR fuga = 2 キーが "AND/OR" の場合は特別扱いされ、AND/OR コンテキストの切り替えが行わる
24 ['NOT' => ['hoge' => 1, 'fuga' => 2]] NOT(hoge = 1 AND fuga = 2) キーが "NOT" の場合も特別扱いされ、その要素を NOT で反転する
25 [SelectBuilder] SelectBuilder の文字列表現をそのまま埋め込む。EXISTS などでよく使用されるが、使い方を誤ると「Operand should contain 1 column(s)」とか「Subquery returns more than 1 row」とか言われるので注意
26 ['hoge' => SelectBuilder] キー付きで SelectBuilder を渡すとサブクエリで条件演算される。左記の場合は hoge IN (SelectBuilder) となる
27 [Operator] 条件式の代わりに Operator インスタンスを渡すことができるが、難解なので説明は省略
28 ['hoge' => Operator::equal(1)] No.5 と同じだが、 equal を別のメソッドに変えればシンプルな key => value 配列を保ちつつ演算子が使える
31 ['hoge' => function () {}] クロージャを渡すとクロージャの実行結果が「あたかもそこにあるかのように」振る舞う

No.9,10 の演算子は LIKEBETWEENIS NULL 、範囲指定できる独自の [~] 演算子などがある。 組み込みの演算子は ryunosuke\dbml\Query\Expression\Operator を参照。

# No.22(検索画面などの http 経由(文字列)でパラメータが流れてくる状況で便利) if ($id) { $predicates['id'] = $id; } $predicates['!id'] = $id; // 上記コードとほぼ同義 // 空の定義には「全ての条件が!で除外されたSelectBuilder」も含むので、下記のコードは空の WHERE になる $predicates['!subid IN(?)'] = $db->select('subtable.id', ['!name' => ''])->exists(); # No.9,10(ややこしいことをしないで手軽に演算子が埋め込める) $predicates['name:%LIKE%'] = 'hoge'; // WHERE name LIKE "%hoge%" $predicates['period:(~]'] = [0, 100]; // WHERE period > 0 AND period <= 100 # No.11(:以降がない場合は No.5~8 になる) $predicates['id'] = 1; // WHERE id = 1 $predicates['id:'] = 1; // ↑と同じ $predicates['id:!'] = 1; // 用途なしに見えるが、このように:!とすると WHERE NOT (id = 1) になり、否定が行える $predicates['id:!'] = [1, 2]; // No.5~8 相当なので配列を与えれば WHERE NOT (id IN (1, 2)) になり、IN の否定が行える # No.15(:hoge は hoge = :hoge になる。頻度は低いが下記のように prepare 化するときに指定が楽になる) $stmt = $db->prepareDelete('table_name', ['id = :id']); // prepare するときは本来ならこのように指定すべきだが・・・ $stmt = $db->prepareDelete('table_name', ['id' => ':id']); // このようなミスがよくある(これは id = ":id" に展開されるのでエラーになる) $stmt = $db->prepareDelete('table_name', ':id'); // このように指定したほうが平易で良い。そしてこの時点で id = :id になるので・・・ $stmt->executeAffect(['id' => 1]); // WHERE id = 1 で実行できる $stmt->executeAffect(['id' => 2]); // WHERE id = 2 で実行できる # No.23(最高にややこしいが、実用上は「OR する場合は配列で包む」という認識でまず事足りるはず) # 原則として配列間は AND で結合される。しかし、要素を配列で包むと、現在のコンテキストとは逆(AND なら OR、OR なら AND)の演算子で結合させることができる $predicates = [ 'delete_flg' => 0, [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]; // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') OR (update_date < '2016-01-01') OR (condA AND condB)) // AND を明示することで (create_date, update_date) 間の結合が AND になる $predicates = [ 'delete_flg' => 0, 'AND' => [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]); // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') AND (update_date < '2016-01-01') AND (condA OR condB)) // 上記のような複雑な用途はほとんどなく、実際は下記のような「(アクティブで姓・名から LIKE 検索のような)何らかの AND と OR を1階層」程度が多い $predicates = [ 'delete_flg' => 0, // 要するに配列で包むと OR になる [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ] ]); // WHERE delete_flg = 0 AND ((sei LIKE "%hoge%") OR (mei LIKE "%hoge%")) # No.24(NOT キーで要素が NOT で囲まれる) $predicates = [ 'delete_flg' => 0, 'NOT' => [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ], ]; // WHERE (delete_flg = '0') AND (NOT ((sei LIKE '%hoge%') AND (mei LIKE '%hoge%'))) # No.25,26(クエリビルダを渡すとそれらしく埋め込まれる) $predicates = [ // ただの EXSISTS クエリになる $db->select('subtable')->exists(), // ? なしのデフォルトではサブクエリの IN になる 'subid1' => $db->select('subtable.subid'), // ? 付きだとそのとおりになる(ここでは = だが <> とか BETWEEN でも同じ。埋め込み演算子も使える) 'subid2 = ?' => $db->select('subtable.subid')->limit(1), ]; // WHERE EXISTS(SELECT * FROM subtable) AND (subid1 IN (SELECT subid FROM subtable)) AND (subid2 = (SELECT subid FROM subtable)) # No.28(Operator::method を呼ぶと左辺がキーで遅延設定される) $predicates = [ // like を呼べばキーに演算子を埋め込まなくても LIKE できる 'name' => Operator::like('hoge'), // not も使える 'text' => Operator::like('hoge')->not(), ]; // WHERE name LIKE '%hoge%' AND NOT(text LIKE '%hoge%') # No.31(クロージャを使うと三項演算子を駆使する必要はない上、スコープを閉じ込めることができる) $predicates = [ // $condition 次第で EXISTS したい(この程度なら三項演算子で十分だが、もっと複雑だと三項演算子で救いきれない) function ($db) use ($condition) { if (!$condition) { return []; } return $db->select('t_example', $condition)->exists(); }, ];
Parameter
type name summary
Database $database
​array $predicate 条件配列
​?array &$params = null bind 値が格納される
​string $andor = "OR" 結合演算子(内部向け引数なので気にしなくて良い)
​?bool &$filterd = null 条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い)
Return
type summary
​array 条件配列
Prototype
kind source summary
​inherit AbstractCondition::build() 条件を正規化する

[M] and

public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition
Prototype
kind source summary
​inherit AbstractCondition::and()

[M] or

public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition
Prototype
kind source summary
​inherit AbstractCondition::or()

[m] __construct

public function __construct( string $andor, array $predicate )
Parameter
type name summary
​string $andor
​array $predicate
Prototype
kind source summary
​inherit AbstractCondition::__construct()

[m] __invoke

public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
Database $database
​?bool &$filtered = null
Return
type summary
Expression
Prototype
kind source summary
​inherit AbstractCondition::__invoke()

[C] AbstractCondition WHERE/HAVING 句の抽象共通クラス

WHERE/HAVING 句の抽象共通クラス

Hierarchy

Parents
type summary
AbstractClause 抽象共通クラス

[M] build 条件を正規化する

条件を正規化する
public static function build( ryunosuke\dbml\Database $database, array $predicate, ?array &$params = null, string $andor = "OR", ?bool &$filterd = null ): array

基本的に配列を与えることが多いが、値はエスケープされるがキーは一切触らずスルーされるためキーには決してユーザ由来の値を渡してはならない また、トップレベル以下の下層に配列が来ても連想配列とはみなされない(キーを使用しない or 連番で振り直す)。

# bad(トップレベルのキーにユーザ入力が渡ってしまう) Where::and($_GET); # better(少なくともトップレベルのキーにユーザ入力が渡ることはない) Where::and([ 'colA' => $_GET['colA'], 'colB' => $_GET['colB'], ]);
No predicates result 説明
0 '' - 値が(phpで)空判定される場合、その条件はスルーされる。空とは null || '' || [] || 全てが!で除外された SelectBuilder のこと
1 'hoge = 1' hoge = 1 ['hoge = 1'] と同じ。単一文字列指定は配列化される
2 ['hoge = 1'] hoge = 1 キーを持たないただの配列はそのまま条件文になる
3 ['hoge = ?' => 1] hoge = 1 キーに ? を含む配列は普通に想起されるプリペアードステートメントになる
4 ['hoge = ? OR fuga = ?' => [1, 2]] hoge = 1 OR fuga = 2 キーに ? を複数含む配列はパラメータがそれぞれのプレースホルダにバインドされる
5 ['hoge' => 1] hoge = 1 キーに ? を含まない [キー => 値] はキーがカラム名、値が bind 値とみなして = で結合される
6 ['hoge' => null] hoge IS NULL 上記と同じだが、値が null の場合は IS NULL 指定とみなす
7 ['hoge' => [1, 2, 3]] hoge IN (1, 2, 3) 上上記と同じだが、値が配列の場合は IN 指定とみなす
8 ['hoge' => []] hoge IN (NULL) 値が空配列の場合は IN(NULL) になる(DBMSにもよるが、実質的には FALSE と同義)
9 ['hoge:LIKE' => 'xxx'] hoge LIKE ('xxx') :演算子を付与するとその演算子で比較が行われる
10 ['hoge:!LIKE' => 'xxx'] NOT (hoge LIKE ('xxx')) : で演算子を明示しかつ ! を付与すると全体として NOT で囲まれる
11 ['hoge:!' => 'xxx'] NOT (hoge = 'xxx') : 以降がない場合はNo.5~8 とみなすその否定なので NOT = になる
15 [':hoge'] hoge = :hoge :hoge のようにコロンで始まる要素は 'hoge = :hoge' に展開される(prepare の利便性が上がる)
21 ['(hoge, fuga)'] => [[1, 2], [3, 4]] (hoge, fuga) IN ((1, 2), (3, 4)) 行値式のようなキーは IN に展開される
22 ['!hoge' => ''] - キーが "!" で始まるかつ bind 値が(phpで)空判定される場合、その条件文自体が抹消される(記号は同じだが前述の :!演算子 とは全く別個)
23 ['AND/OR' => ['hoge' => 1, 'fuga' => 2]] hoge = 1 OR fuga = 2 キーが "AND/OR" の場合は特別扱いされ、AND/OR コンテキストの切り替えが行わる
24 ['NOT' => ['hoge' => 1, 'fuga' => 2]] NOT(hoge = 1 AND fuga = 2) キーが "NOT" の場合も特別扱いされ、その要素を NOT で反転する
25 [SelectBuilder] SelectBuilder の文字列表現をそのまま埋め込む。EXISTS などでよく使用されるが、使い方を誤ると「Operand should contain 1 column(s)」とか「Subquery returns more than 1 row」とか言われるので注意
26 ['hoge' => SelectBuilder] キー付きで SelectBuilder を渡すとサブクエリで条件演算される。左記の場合は hoge IN (SelectBuilder) となる
27 [Operator] 条件式の代わりに Operator インスタンスを渡すことができるが、難解なので説明は省略
28 ['hoge' => Operator::equal(1)] No.5 と同じだが、 equal を別のメソッドに変えればシンプルな key => value 配列を保ちつつ演算子が使える
31 ['hoge' => function () {}] クロージャを渡すとクロージャの実行結果が「あたかもそこにあるかのように」振る舞う

No.9,10 の演算子は LIKEBETWEENIS NULL 、範囲指定できる独自の [~] 演算子などがある。 組み込みの演算子は ryunosuke\dbml\Query\Expression\Operator を参照。

# No.22(検索画面などの http 経由(文字列)でパラメータが流れてくる状況で便利) if ($id) { $predicates['id'] = $id; } $predicates['!id'] = $id; // 上記コードとほぼ同義 // 空の定義には「全ての条件が!で除外されたSelectBuilder」も含むので、下記のコードは空の WHERE になる $predicates['!subid IN(?)'] = $db->select('subtable.id', ['!name' => ''])->exists(); # No.9,10(ややこしいことをしないで手軽に演算子が埋め込める) $predicates['name:%LIKE%'] = 'hoge'; // WHERE name LIKE "%hoge%" $predicates['period:(~]'] = [0, 100]; // WHERE period > 0 AND period <= 100 # No.11(:以降がない場合は No.5~8 になる) $predicates['id'] = 1; // WHERE id = 1 $predicates['id:'] = 1; // ↑と同じ $predicates['id:!'] = 1; // 用途なしに見えるが、このように:!とすると WHERE NOT (id = 1) になり、否定が行える $predicates['id:!'] = [1, 2]; // No.5~8 相当なので配列を与えれば WHERE NOT (id IN (1, 2)) になり、IN の否定が行える # No.15(:hoge は hoge = :hoge になる。頻度は低いが下記のように prepare 化するときに指定が楽になる) $stmt = $db->prepareDelete('table_name', ['id = :id']); // prepare するときは本来ならこのように指定すべきだが・・・ $stmt = $db->prepareDelete('table_name', ['id' => ':id']); // このようなミスがよくある(これは id = ":id" に展開されるのでエラーになる) $stmt = $db->prepareDelete('table_name', ':id'); // このように指定したほうが平易で良い。そしてこの時点で id = :id になるので・・・ $stmt->executeAffect(['id' => 1]); // WHERE id = 1 で実行できる $stmt->executeAffect(['id' => 2]); // WHERE id = 2 で実行できる # No.23(最高にややこしいが、実用上は「OR する場合は配列で包む」という認識でまず事足りるはず) # 原則として配列間は AND で結合される。しかし、要素を配列で包むと、現在のコンテキストとは逆(AND なら OR、OR なら AND)の演算子で結合させることができる $predicates = [ 'delete_flg' => 0, [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]; // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') OR (update_date < '2016-01-01') OR (condA AND condB)) // AND を明示することで (create_date, update_date) 間の結合が AND になる $predicates = [ 'delete_flg' => 0, 'AND' => [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]); // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') AND (update_date < '2016-01-01') AND (condA OR condB)) // 上記のような複雑な用途はほとんどなく、実際は下記のような「(アクティブで姓・名から LIKE 検索のような)何らかの AND と OR を1階層」程度が多い $predicates = [ 'delete_flg' => 0, // 要するに配列で包むと OR になる [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ] ]); // WHERE delete_flg = 0 AND ((sei LIKE "%hoge%") OR (mei LIKE "%hoge%")) # No.24(NOT キーで要素が NOT で囲まれる) $predicates = [ 'delete_flg' => 0, 'NOT' => [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ], ]; // WHERE (delete_flg = '0') AND (NOT ((sei LIKE '%hoge%') AND (mei LIKE '%hoge%'))) # No.25,26(クエリビルダを渡すとそれらしく埋め込まれる) $predicates = [ // ただの EXSISTS クエリになる $db->select('subtable')->exists(), // ? なしのデフォルトではサブクエリの IN になる 'subid1' => $db->select('subtable.subid'), // ? 付きだとそのとおりになる(ここでは = だが <> とか BETWEEN でも同じ。埋め込み演算子も使える) 'subid2 = ?' => $db->select('subtable.subid')->limit(1), ]; // WHERE EXISTS(SELECT * FROM subtable) AND (subid1 IN (SELECT subid FROM subtable)) AND (subid2 = (SELECT subid FROM subtable)) # No.28(Operator::method を呼ぶと左辺がキーで遅延設定される) $predicates = [ // like を呼べばキーに演算子を埋め込まなくても LIKE できる 'name' => Operator::like('hoge'), // not も使える 'text' => Operator::like('hoge')->not(), ]; // WHERE name LIKE '%hoge%' AND NOT(text LIKE '%hoge%') # No.31(クロージャを使うと三項演算子を駆使する必要はない上、スコープを閉じ込めることができる) $predicates = [ // $condition 次第で EXISTS したい(この程度なら三項演算子で十分だが、もっと複雑だと三項演算子で救いきれない) function ($db) use ($condition) { if (!$condition) { return []; } return $db->select('t_example', $condition)->exists(); }, ];
Parameter
type name summary
Database $database
​array $predicate 条件配列
​?array &$params = null bind 値が格納される
​string $andor = "OR" 結合演算子(内部向け引数なので気にしなくて良い)
​?bool &$filterd = null 条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い)
Return
type summary
​array 条件配列

[M] and

public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition

[M] or

public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition

[m] __construct

public function __construct( string $andor, array $predicate )
Parameter
type name summary
​string $andor
​array $predicate

[m] __invoke

public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
Database $database
​?bool &$filtered = null
Return
type summary
Expression

[C] OrderBy ORDER BY 句クラス

ORDER BY 句クラス

このクラスのインスタンスを orderBy すると、特殊な ORDER BY として扱われる。

ランダム系は原則として「limit 件数」を返すことを期待してはならない。 多く返すことはないが、少なく返すことはある。

$db->select('tablename.columname')->orderBy(OrderBy::randomOrder()); // SELECT columnname FROM tablename ORDER BY RAND()

Hierarchy

Parents
type summary
AbstractClause 抽象共通クラス

[C] CTE_TABLE

public const string CTE_TABLE = "__dbml_cte_table"

[C] CTE_TABLE_ALIAS

public const string CTE_TABLE_ALIAS = "__dbml_cte_table_alias"

[C] CTE_AUTO_PKEY

public const string CTE_AUTO_PKEY = "__dbml_auto_column_depend_cte"

[p] $asc

public ?bool $asc

Type: ?bool

[p] $nullsOrder

public ?string $nullsOrder

Type: ?string

[m] __construct

public function __construct( bool $rewritable, ?bool $asc = null, ?string $nullsOrder = null )
Parameter
type name summary
​bool $rewritable
​?bool $asc = null
​?string $nullsOrder = null

[m] __invoke

public function __invoke(ryunosuke\dbml\Query\SelectBuilder $builder)
Parameter
type name summary
SelectBuilder $builder

[m] isRewritable

public function isRewritable(): bool
Return
type summary
​bool

[M] primary 主キーで ORDER BY する

主キーで ORDER BY する
public static function primary(?bool $asc = null): ryunosuke\dbml\Query\Clause\OrderBy
Parameter
type name summary
​?bool $asc = null
Return
type summary
OrderBy

[M] secure 実在するカラムやエイリアスをチェックするセキュアな ORDER BY

実在するカラムやエイリアスをチェックするセキュアな ORDER BY
public static function secure( $columns, ?bool $asc = null, ?string $nullsOrder = null ): ryunosuke\dbml\Query\Clause\OrderBy
  • from,join 句にあるテーブルカラムの実名
  • select 句にあるエイリアス名
  • Expression インスタンス

以外は何もせずスルーされる。 その性質上、事前に実行しておくことは出来ない。

// test に id カラムは存在するので order by id される $db->select('test')->orderBySecure('id'); // 修飾しても OK $db->select('test')->orderBySecure('test.id'); // Expression インスタンスは無条件で OK $db->select('test.id AS hoge')->orderBySecure(Expression::new('NOW()')); // test に hoge カラムは存在しないが id のエイリアスなので OK $db->select('test.id AS hoge')->orderBySecure('hoge'); // test に fuga カラムは存在せず、エイリアスもないため、このメソッドは何も行わない $db->select('test.id as hoge')->orderBySecure('fuga');

エラーや例外が出ないので挙動が分かりにくいが、下手にエラーを出すと「攻撃が可能そう」に見えてしまうのでこのような動作にしている。

Parameter
type name summary
$columns
​?bool $asc = null
​?string $nullsOrder = null
Return
type summary
OrderBy

[M] array 指定配列の順番で ORDER BY する

指定配列の順番で ORDER BY する
public static function array( array $array, ?bool $asc = null, ?string $nullsOrder = null ): ryunosuke\dbml\Query\Clause\OrderBy
Parameter
type name summary
​array $array
​?bool $asc = null
​?string $nullsOrder = null
Return
type summary
OrderBy

[M] random シンプルに ORDER BY RANDOM() する

シンプルに ORDER BY RANDOM() する
public static function random(?int $seed = null): ryunosuke\dbml\Query\Clause\OrderBy
pros
良い意味で速度のブレが少ない(状態や引数に依存して遅くなったりしない)
cons
悪い意味で速度のブレが少ない(状態や引数に依存して速くなったりしない)
Parameter
type name summary
​?int $seed = null
Return
type summary
OrderBy

[M] randomSuitably 状態や統計に基づいてランダム化する

状態や統計に基づいてランダム化する
public static function randomSuitably(): ryunosuke\dbml\Query\Clause\OrderBy

ただし現状は randomOrder, randomPKMinMax, randomPK のみ(他は癖が強すぎる)。

Return
type summary
OrderBy

[M] randomWhere N/COUNT の確率で WHERE する

N/COUNT の確率で WHERE する
public static function randomWhere(): ryunosuke\dbml\Query\Clause\OrderBy
pros
そこそこ速い
cons
指定件数以下になりやすい・等確率でない・1クエリで完結しない・速度が安定しない(速いときは速いが遅いときは遅い)
Return
type summary
OrderBy

[M] randomOffset OFFSET をずらして UNION する

OFFSET をずらして UNION する
public static function randomOffset(): ryunosuke\dbml\Query\Clause\OrderBy
pros
それなりに速い
cons
要CTE・クエリが大幅に書き換えられる・1クエリで完結しない・速度が安定しない(速いときは速いが遅いときは遅い)
Return
type summary
OrderBy

[M] randomPK 主キーで IN(SQL 内部で pk を subquery)する

主キーで IN(SQL 内部で pk を subquery)する
public static function randomPK(): ryunosuke\dbml\Query\Clause\OrderBy
pros
それなりに速い
cons
要CTE・JOINに弱い
Return
type summary
OrderBy

[M] randomPKMinMax 主キーで IN(php で minmax pk を生成して IN)する

主キーで IN(php で minmax pk を生成して IN)する
public static function randomPKMinMax(): ryunosuke\dbml\Query\Clause\OrderBy
pros
かなり速い
cons
主キーが数値前提・JOINに弱い・歯抜けが発生する・1クエリで完結しない
Return
type summary
OrderBy

[M] randomPKMinMax2 主キーで IN(php で minmax pk を生成して UNION)する

主キーで IN(php で minmax pk を生成して UNION)する
public static function randomPKMinMax2(): ryunosuke\dbml\Query\Clause\OrderBy
pros
かなり速い・歯抜けが発生しない
cons
要CTE・主キーが数値前提・JOINに弱い・偏りが激しい・クエリが大幅に書き換えられる・1クエリで完結しない
Return
type summary
OrderBy

[C] Select カラムエイリアスを表すクラス

カラムエイリアスを表すクラス

new Alias('alias', 'actual') を select に与えると "actual AS alias" に展開される。

Hierarchy

Parents
type summary
AbstractClause 抽象共通クラス
Implements
type summary
Stringable

[M] __callStatic インスタンスを返す

インスタンスを返す
public static function __callStatic( string $alias, array $actuals ): ryunosuke\dbml\Query\Clause\Select
  • new Alias('hoge', 'actual');
  • Alias::hoge('actual');

これらはそれぞれ等価になる。

Parameter
type name summary
​string $alias
​array $actuals
Return
type summary
Select

[M] split hoge as fuga を分割する

hoge as fuga を分割する
public static function split( string $string, $defaultAlias = null ): array
Parameter
type name summary
​string $string
$defaultAlias = null
Return
type summary
​array [エイリアス, 実名]

[M] forge 値を Alias 化して返す

値を Alias 化して返す
public static function forge( string $alias, mixed $actual, string|null $modifier = null ): ryunosuke\dbml\Query\Clause\Select|mixed

変換できなそうならそのまま返す。

Parameter
type name summary
​string $alias エイリアス名
​mixed $actual 実名
​string|​null $modifier = null $actual の修飾子
Return
type summary
Select|​mixed Alias 化できたら Alias オブジェクト、できなかったら $actual をそのまま返す

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ?string $alias, mixed $actual, ?string $modifier = null, bool $placeholdable = false )
Parameter
type name summary
​?string $alias
​mixed $actual
​?string $modifier = null
​bool $placeholdable = false

[m] __toString 文字列表現を返す

文字列表現を返す
public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[m] getAlias エイリアス名を返す

エイリアス名を返す
public function getAlias(): ?string
Return
type summary
​?string

[m] getActual 実部名を返す

実部名を返す
public function getActual()

[m] getModifier 修飾子を返す

修飾子を返す
public function getModifier(): ?string
Return
type summary
​?string

[m] isPlaceholdable 自動で伏せるべきか

自動で伏せるべきか
public function isPlaceholdable(): bool
Return
type summary
​bool

[C] SelectOption SELECT オプションクラス

SELECT オプションクラス

このクラスのインスタンスを select すると、カラムとして追加されるのではなく、 SELECT 句の冒頭にカンマ無しで展開される。 SELECT OPT1 OPT2 column1, column2 のような形を実現するためのクラス。

$db->select('tablename.columname')->addSelectOption(SelectOption::DISTINCT); // SELECT DISTINCT columnname FROM tablename

Hierarchy

Parents
type summary
AbstractClause 抽象共通クラス
Implements
type summary
Stringable

[C] DISTINCT

public const string DISTINCT = "DISTINCT"

[C] SQL_CACHE

public const string SQL_CACHE = "SQL_CACHE"

[C] SQL_NO_CACHE

public const string SQL_NO_CACHE = "SQL_NO_CACHE"

[C] SQL_CALC_FOUND_ROWS

public const string SQL_CALC_FOUND_ROWS = "SQL_CALC_FOUND_ROWS"

[C] STRAIGHT_JOIN

public const string STRAIGHT_JOIN = "STRAIGHT_JOIN"

[M] __callStatic インスタンスを返す

インスタンスを返す
public static function __callStatic( string $expr, array $arguments ): ryunosuke\dbml\Query\Clause\SelectOption
  • new SelectOption('DISTINCT');
  • SelectOption::DISTINCT();

これらはそれぞれ等価になる

Parameter
type name summary
​string $expr
​array $arguments
Return
type summary
SelectOption

[m] __construct コンストラクタ

コンストラクタ
public function __construct(string $expr)

valid な文字列かどうかのチェックは行わないので、 SelectOption::DISTINCT のような定数を与えてもよいし、固定文字列を与えても良い。

Parameter
type name summary
​string $expr

[m] __toString 文字列表現を返す

文字列表現を返す
public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[M] DISTINCT

public static function DISTINCT(): ryunosuke\dbml\Query\Clause\SelectOption
Return
type summary
SelectOption

[M] SQL_CACHE

public static function SQL_CACHE(): ryunosuke\dbml\Query\Clause\SelectOption
Return
type summary
SelectOption

[M] SQL_NO_CACHE

public static function SQL_NO_CACHE(): ryunosuke\dbml\Query\Clause\SelectOption
Return
type summary
SelectOption

[M] SQL_CALC_FOUND_ROWS

public static function SQL_CALC_FOUND_ROWS(): ryunosuke\dbml\Query\Clause\SelectOption
Return
type summary
SelectOption

[M] STRAIGHT_JOIN

public static function STRAIGHT_JOIN(): ryunosuke\dbml\Query\Clause\SelectOption
Return
type summary
SelectOption

[C] Where WHERE 句クラス

WHERE 句クラス

Hierarchy

Parents
type summary
AbstractCondition WHERE/HAVING 句の抽象共通クラス
AbstractClause 抽象共通クラス

[M] build 条件を正規化する

条件を正規化する
public static function build( ryunosuke\dbml\Database $database, array $predicate, ?array &$params = null, string $andor = "OR", ?bool &$filterd = null ): array

基本的に配列を与えることが多いが、値はエスケープされるがキーは一切触らずスルーされるためキーには決してユーザ由来の値を渡してはならない また、トップレベル以下の下層に配列が来ても連想配列とはみなされない(キーを使用しない or 連番で振り直す)。

# bad(トップレベルのキーにユーザ入力が渡ってしまう) Where::and($_GET); # better(少なくともトップレベルのキーにユーザ入力が渡ることはない) Where::and([ 'colA' => $_GET['colA'], 'colB' => $_GET['colB'], ]);
No predicates result 説明
0 '' - 値が(phpで)空判定される場合、その条件はスルーされる。空とは null || '' || [] || 全てが!で除外された SelectBuilder のこと
1 'hoge = 1' hoge = 1 ['hoge = 1'] と同じ。単一文字列指定は配列化される
2 ['hoge = 1'] hoge = 1 キーを持たないただの配列はそのまま条件文になる
3 ['hoge = ?' => 1] hoge = 1 キーに ? を含む配列は普通に想起されるプリペアードステートメントになる
4 ['hoge = ? OR fuga = ?' => [1, 2]] hoge = 1 OR fuga = 2 キーに ? を複数含む配列はパラメータがそれぞれのプレースホルダにバインドされる
5 ['hoge' => 1] hoge = 1 キーに ? を含まない [キー => 値] はキーがカラム名、値が bind 値とみなして = で結合される
6 ['hoge' => null] hoge IS NULL 上記と同じだが、値が null の場合は IS NULL 指定とみなす
7 ['hoge' => [1, 2, 3]] hoge IN (1, 2, 3) 上上記と同じだが、値が配列の場合は IN 指定とみなす
8 ['hoge' => []] hoge IN (NULL) 値が空配列の場合は IN(NULL) になる(DBMSにもよるが、実質的には FALSE と同義)
9 ['hoge:LIKE' => 'xxx'] hoge LIKE ('xxx') :演算子を付与するとその演算子で比較が行われる
10 ['hoge:!LIKE' => 'xxx'] NOT (hoge LIKE ('xxx')) : で演算子を明示しかつ ! を付与すると全体として NOT で囲まれる
11 ['hoge:!' => 'xxx'] NOT (hoge = 'xxx') : 以降がない場合はNo.5~8 とみなすその否定なので NOT = になる
15 [':hoge'] hoge = :hoge :hoge のようにコロンで始まる要素は 'hoge = :hoge' に展開される(prepare の利便性が上がる)
21 ['(hoge, fuga)'] => [[1, 2], [3, 4]] (hoge, fuga) IN ((1, 2), (3, 4)) 行値式のようなキーは IN に展開される
22 ['!hoge' => ''] - キーが "!" で始まるかつ bind 値が(phpで)空判定される場合、その条件文自体が抹消される(記号は同じだが前述の :!演算子 とは全く別個)
23 ['AND/OR' => ['hoge' => 1, 'fuga' => 2]] hoge = 1 OR fuga = 2 キーが "AND/OR" の場合は特別扱いされ、AND/OR コンテキストの切り替えが行わる
24 ['NOT' => ['hoge' => 1, 'fuga' => 2]] NOT(hoge = 1 AND fuga = 2) キーが "NOT" の場合も特別扱いされ、その要素を NOT で反転する
25 [SelectBuilder] SelectBuilder の文字列表現をそのまま埋め込む。EXISTS などでよく使用されるが、使い方を誤ると「Operand should contain 1 column(s)」とか「Subquery returns more than 1 row」とか言われるので注意
26 ['hoge' => SelectBuilder] キー付きで SelectBuilder を渡すとサブクエリで条件演算される。左記の場合は hoge IN (SelectBuilder) となる
27 [Operator] 条件式の代わりに Operator インスタンスを渡すことができるが、難解なので説明は省略
28 ['hoge' => Operator::equal(1)] No.5 と同じだが、 equal を別のメソッドに変えればシンプルな key => value 配列を保ちつつ演算子が使える
31 ['hoge' => function () {}] クロージャを渡すとクロージャの実行結果が「あたかもそこにあるかのように」振る舞う

No.9,10 の演算子は LIKEBETWEENIS NULL 、範囲指定できる独自の [~] 演算子などがある。 組み込みの演算子は ryunosuke\dbml\Query\Expression\Operator を参照。

# No.22(検索画面などの http 経由(文字列)でパラメータが流れてくる状況で便利) if ($id) { $predicates['id'] = $id; } $predicates['!id'] = $id; // 上記コードとほぼ同義 // 空の定義には「全ての条件が!で除外されたSelectBuilder」も含むので、下記のコードは空の WHERE になる $predicates['!subid IN(?)'] = $db->select('subtable.id', ['!name' => ''])->exists(); # No.9,10(ややこしいことをしないで手軽に演算子が埋め込める) $predicates['name:%LIKE%'] = 'hoge'; // WHERE name LIKE "%hoge%" $predicates['period:(~]'] = [0, 100]; // WHERE period > 0 AND period <= 100 # No.11(:以降がない場合は No.5~8 になる) $predicates['id'] = 1; // WHERE id = 1 $predicates['id:'] = 1; // ↑と同じ $predicates['id:!'] = 1; // 用途なしに見えるが、このように:!とすると WHERE NOT (id = 1) になり、否定が行える $predicates['id:!'] = [1, 2]; // No.5~8 相当なので配列を与えれば WHERE NOT (id IN (1, 2)) になり、IN の否定が行える # No.15(:hoge は hoge = :hoge になる。頻度は低いが下記のように prepare 化するときに指定が楽になる) $stmt = $db->prepareDelete('table_name', ['id = :id']); // prepare するときは本来ならこのように指定すべきだが・・・ $stmt = $db->prepareDelete('table_name', ['id' => ':id']); // このようなミスがよくある(これは id = ":id" に展開されるのでエラーになる) $stmt = $db->prepareDelete('table_name', ':id'); // このように指定したほうが平易で良い。そしてこの時点で id = :id になるので・・・ $stmt->executeAffect(['id' => 1]); // WHERE id = 1 で実行できる $stmt->executeAffect(['id' => 2]); // WHERE id = 2 で実行できる # No.23(最高にややこしいが、実用上は「OR する場合は配列で包む」という認識でまず事足りるはず) # 原則として配列間は AND で結合される。しかし、要素を配列で包むと、現在のコンテキストとは逆(AND なら OR、OR なら AND)の演算子で結合させることができる $predicates = [ 'delete_flg' => 0, [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]; // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') OR (update_date < '2016-01-01') OR (condA AND condB)) // AND を明示することで (create_date, update_date) 間の結合が AND になる $predicates = [ 'delete_flg' => 0, 'AND' => [ 'create_date < ?' => '2016-01-01', 'update_date < ?' => '2016-01-01', ['condA', 'condB'] ] ]); // WHERE delete_flg = 0 AND ((create_time < '2016-01-01') AND (update_date < '2016-01-01') AND (condA OR condB)) // 上記のような複雑な用途はほとんどなく、実際は下記のような「(アクティブで姓・名から LIKE 検索のような)何らかの AND と OR を1階層」程度が多い $predicates = [ 'delete_flg' => 0, // 要するに配列で包むと OR になる [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ] ]); // WHERE delete_flg = 0 AND ((sei LIKE "%hoge%") OR (mei LIKE "%hoge%")) # No.24(NOT キーで要素が NOT で囲まれる) $predicates = [ 'delete_flg' => 0, 'NOT' => [ 'sei:%LIKE%' => 'hoge', 'mei:%LIKE%' => 'hoge', ], ]; // WHERE (delete_flg = '0') AND (NOT ((sei LIKE '%hoge%') AND (mei LIKE '%hoge%'))) # No.25,26(クエリビルダを渡すとそれらしく埋め込まれる) $predicates = [ // ただの EXSISTS クエリになる $db->select('subtable')->exists(), // ? なしのデフォルトではサブクエリの IN になる 'subid1' => $db->select('subtable.subid'), // ? 付きだとそのとおりになる(ここでは = だが <> とか BETWEEN でも同じ。埋め込み演算子も使える) 'subid2 = ?' => $db->select('subtable.subid')->limit(1), ]; // WHERE EXISTS(SELECT * FROM subtable) AND (subid1 IN (SELECT subid FROM subtable)) AND (subid2 = (SELECT subid FROM subtable)) # No.28(Operator::method を呼ぶと左辺がキーで遅延設定される) $predicates = [ // like を呼べばキーに演算子を埋め込まなくても LIKE できる 'name' => Operator::like('hoge'), // not も使える 'text' => Operator::like('hoge')->not(), ]; // WHERE name LIKE '%hoge%' AND NOT(text LIKE '%hoge%') # No.31(クロージャを使うと三項演算子を駆使する必要はない上、スコープを閉じ込めることができる) $predicates = [ // $condition 次第で EXISTS したい(この程度なら三項演算子で十分だが、もっと複雑だと三項演算子で救いきれない) function ($db) use ($condition) { if (!$condition) { return []; } return $db->select('t_example', $condition)->exists(); }, ];
Parameter
type name summary
Database $database
​array $predicate 条件配列
​?array &$params = null bind 値が格納される
​string $andor = "OR" 結合演算子(内部向け引数なので気にしなくて良い)
​?bool &$filterd = null 条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い)
Return
type summary
​array 条件配列
Prototype
kind source summary
​inherit AbstractCondition::build() 条件を正規化する

[M] and

public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition
Prototype
kind source summary
​inherit AbstractCondition::and()

[M] or

public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
Parameter
type name summary
​array $predicate
Return
type summary
AbstractCondition
Prototype
kind source summary
​inherit AbstractCondition::or()

[m] __construct

public function __construct( string $andor, array $predicate )
Parameter
type name summary
​string $andor
​array $predicate
Prototype
kind source summary
​inherit AbstractCondition::__construct()

[m] __invoke

public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
Database $database
​?bool &$filtered = null
Return
type summary
Expression
Prototype
kind source summary
​inherit AbstractCondition::__invoke()

[N] ryunosuke\dbml\Query\Expression\

[C] Expression 生クエリを表すクラス

生クエリを表すクラス

Expression::new('NOW()') を select に与えると "NOW()" に展開される(エスケープやサブクエリ化などの余計なことを一切行わない)。

Hierarchy

Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Stringable
Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait

[p] $expr

protected ?string $expr

Type: ?string

[p] $params

protected array $params

Type: array

[M] case CASE ~ END 構文

CASE ~ END 構文
public static function case( null|string|ryunosuke\dbml\Query\Queryable $expr, array $whens, mixed $else = null ): ryunosuke\dbml\Query\Expression\Expression|ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​null|​string|​Queryable $expr 対象カラム。null 指定時は CASE WHEN 構文になる
​array $whens [条件 => 値]の配列
​mixed $else = null else 句。未指定時は else 句なし
Return
type summary
Expression|​Expression CASE ~ END 構文の Expression インスタンス

[M] over OVER 句を生成する

OVER 句を生成する
public static function over( $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
Expression
See
type summary
Expression::window()

[M] window 裸の OVER 句を生成する

裸の OVER 句を生成する
public static function window( $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\Expression\Expression

エスケープなどは一切行われないので注意(OVER でリテラルを指定するシチュエーションが少ないため)。 ただし Queryable は受け付ける。

$frame は使い慣れないと呪文みたいな句になるので簡易的に与えられるようにしてある。 文字列を渡せばそのまま埋め込まれるので、簡易指定が不要な場合はそのまま与えればよい。 下記のようにキーがモード、値が式に対応する(配列の場合は BETWEEN になる)。

['ROWS' => null]; // ROWS UNBOUNDED PRECEDING

['ROWS' => 0]; // ROWS CURRENT ROW

['ROWS' => [-1, +1]]; // ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

Parameter
type name summary
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
Expression

[M] forge 値を Expression 化して返す

値を Expression 化して返す
public static function forge(mixed $expr): mixed

変換できなそうならそのまま返す。

# 素の文字列はそのまま文字列のまま返す $expr = Expression::forge('hoge'); // string: hoge # "NULL" という文字列は expression を返す $expr = Expression::forge("NULL"); // Expression: "NULL" # (が含まれているなら Expression を返す $expr = Expression::forge("NOW()"); // Expression: "NOW()" # 数値型なら Expression を返す $expr = Expression::forge(123); // Expression: "123" $expr = Expression::forge(1.2); // Expression: "1.2" # 真偽値なら数値 Expression を返す $expr = Expression::forge(true); // Expression: "1" $expr = Expression::forge(false); // Expression: "0"
Parameter
type name summary
​mixed $expr
Return
type summary
​mixed

[M] __callStatic インスタンスを返す

インスタンスを返す
public static function __callStatic( string $expr, array $params ): ryunosuke\dbml\Query\Expression\Expression
  • 引数なしなら呼び出し式をそのまま返す
  • 引数ありならパラメータ付きで返す
    • ただしプレースホルダーがないなら(?,...,?)を付け足す

つまり

  • Expression::new('NOW()');
  • Expression::NOW();

  • Expression::new('ADD(?, ?)', array(1, 2));
  • Expression::{'ADD(?, ?)'}(1, 2);
  • Expression::ADD(1, 2);

はそれぞれ等価になる。

Parameter
type name summary
​string $expr
​array $params
Return
type summary
Expression

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ?string $expr, mixed $params = [] )
Parameter
type name summary
​?string $expr
​mixed $params = []

[m] __toString 文字列表現を返す

文字列表現を返す
public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[m] setParams

public function setParams(array $params)
Parameter
type name summary
​array $params

[m] getParams パラメータを返す

パラメータを返す
public function getParams(): array
Return
type summary
​array
Prototype
kind source summary
​implement Queryable::getParams() パラメータを返す

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::getQuery() クエリ文字列を返す

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​implement Queryable::merge() パラメータをマージして文字列表現を返す

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[C] Operator 演算子を表すクラス

演算子を表すクラス

内部的に使用されるだけで、明示的に使用する箇所はほとんど無い。 ただし、下記の演算子登録を使用する場合は ryunosuke\dbml\Query\Expression\Operator::define() で登録する必要がある。

組み込みの演算子は下記。これらは何もしなくても ryunosuke\dbml\Query\Clause\Where::build() で使用することができる。

operator result 説明
LIKE, BETWEEN, =, <>, etc... 略。BETWEEN は値に配列を与える 大体の RDBMS に備わっている標準的な演算子。想起される通りの動作するので説明は省略。他にも IN<=> 等がある。
'hoge:[~)' => [1, 9] hoge >= 1 AND hoge < 9 範囲指定。 [~][] はイコール有り、() はイコール無しを意味する。つまり、 [~] [~) (~] (~) の4つの演算子がある。順に「以上・以下」「以上・小なり」「大なり・以下」「大なり・小なり」を意味する。
'hoge:[~)' => [1, null] hoge >= 1 上記と同じ。ただし、バインド値に null を渡すと指定した方の条件が吹き飛ぶ
'hoge:[~)' => [null, 9] hoge < 9 上記の後半部分版
'hoge:[~)' => [null, null] - バインド値に両方 null を渡すと条件自体が吹き飛ぶ
'hoge:LIKE%' => 'wo%rd' hoge LIKE 'wo\%rd%' LIKEエスケープを施した上で右に"%"を付加してLIKEする。他にも %LIKE %LIKE% がある
'hoge:LIKEIN%' => ['he%lo', 'wo%rd'] hoge LIKE 'he\%lo%' OR hoge LIKE 'wo\%rd%' 上記の配列IN版。構文的には LIKE ANY('str1', 'str2') みたいなもの
'hoge:PHRASE' => 'hello*world|phrase' hoge REGEXP 'hello.*world' OR hoge REGEXP 'phrase' LIKEのワイルドカードを正規表現に変換してよしなにREGEXPする。シングルクォート:あらゆるメタ文字を無効化して完全一致検索, ダブルクォート:セパレータの無効化, ハイフン:NOT, スペース:AND, パイプ:OR, カンマ:優先度高OR
'hoge:NULLIN' => [1, 2, 3, NULL] hoge IN (1, 2, 3) OR hoge IS NULL NULL を許容できる IN。 [1, 2, 3, null] などとすると IN(1, 2, 3) or NULL のようになる
# 独自演算子 FISOR を定義する Operator::define('FISOR', function ($column, $params) { $conds = array_fill(0, count($params), "FIND_IN_SET(?, $column)"); return [implode(' OR ', $conds) => $params]; }); # すると whereInto の演算子指定で使用できるようになる $db->whereInto([ 'col:FISOR' => [1, 2], ]); // WHERE FIND_IN_SET(1, col) OR FIND_IN_SET(2, col) # 上記のような定義や is, equal などの組み込みの特殊なメソッドの返り値は whereInto で直接指定できる $db->whereInto([ 'colA' => Operator::FISOR(1, 2), 'colB' => Operator::in(1, 2), 'colC' => Operator::between(1, 2), ]); // WHERE FIND_IN_SET(1, colA) OR FIND_IN_SET(2, col) AND colB IN (1, 2) AND colB BETWEEN 1 AND 2

Hierarchy

Parents
type summary
Expression 生クエリを表すクラス
Implements
type summary
Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Stringable
Uses
type summary
FactoryTrait 拡張クラスを返せるようにする trait

[C] RAW

public const string RAW = "__RAW__"

[C] COLVAL

public const string COLVAL = "__COLVAL__"

[C] OP_EQUAL

public const string OP_EQUAL = "="

[C] OP_SPACESHIP

public const string OP_SPACESHIP = "<=>"

[C] OP_IS_NULL

public const string OP_IS_NULL = "IS NULL"

[C] OP_BETWEEN

public const string OP_BETWEEN = "BETWEEN"

[C] OP_IN

public const string OP_IN = "IN"

[C] OP_LT

public const string OP_LT = "<"

[C] OP_LTE

public const string OP_LTE = "<="

[C] OP_GT

public const string OP_GT = ">"

[C] OP_GTE

public const string OP_GTE = ">="

[C] OP_RIGHT_LIKE

public const string OP_RIGHT_LIKE = "LIKE%"

[C] OP_LEFT_LIKE

public const string OP_LEFT_LIKE = "%LIKE"

[C] OP_BOTH_LIKE

public const string OP_BOTH_LIKE = "%LIKE%"

[C] OP_NULLIN

public const string OP_NULLIN = "NULLIN"

[C] OP_RIGHT_LIKEIN

public const string OP_RIGHT_LIKEIN = "LIKEIN%"

[C] OP_LEFT_LIKEIN

public const string OP_LEFT_LIKEIN = "%LIKEIN"

[C] OP_BOTH_LIKEIN

public const string OP_BOTH_LIKEIN = "%LIKEIN%"

[C] OP_PHRASE

public const string OP_PHRASE = "PHRASE"

[C] OP_RANGE

public const string OP_RANGE = "(~)"

[C] OP_RANGE_LTE

public const string OP_RANGE_LTE = "[~)"

[C] OP_RANGE_GTE

public const string OP_RANGE_GTE = "(~]"

[C] OP_RANGE_BETWEEN

public const string OP_RANGE_BETWEEN = "[~]"

[p] $platform

protected ?ryunosuke\dbml\Metadata\CompatiblePlatform $platform

Type: ?CompatiblePlatform

[p] $operator

protected string $operator

Type: string

[p] $operand1

protected ?string $operand1

Type: ?string

[p] $operand2

protected ?array $operand2

Type: ?array

[p] $isarray

protected bool $isarray

Type: bool

[p] $not

protected bool $not = false

Type: bool

[p] $expr

protected ?string $expr

Type: ?string

Prototype
kind source summary
​inherit Expression::$expr

[p] $params

protected array $params

Type: array

Prototype
kind source summary
​inherit Expression::$params

[M] define 演算子を定義する

演算子を定義する
public static function define( string $operator, ?callable $callback )

設定値として「カラム, 値を受け取り、[式 => パラメータ] を返すクロージャ」を与えなければならない。 (クラス冒頭のサンプルを参照)。

Parameter
type name summary
​string $operator
​?callable $callback

[M] __callStatic インスタンスを返す

インスタンスを返す
public static function __callStatic( string $operator, array $operands ): ryunosuke\dbml\Query\Expression\Operator
  • Operator::new($platform, 'BETWEEN', 'hoge', '1');
  • Operator::BETWEEN('hoge', '1', $platform);
  • Operator::BETWEEN('hoge', '1');

これらはそれぞれ等価になる($platform は optional)。

下記の特殊なメソッド名はカラムを指定せずに値だけを指定できる($platform も不要)。

  • is
  • equal
  • 他多数(クラスの method を参照)

これを利用すると ryunosuke\dbml\Query\Clause\Where::build() で演算子を指定せずシンプルな条件指定が出来るようになる(クラス冒頭を参照)。

Parameter
type name summary
​string $operator
​array $operands
Return
type summary
Operator
Prototype
kind source summary
​override Expression::__callStatic() インスタンスを返す

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ?ryunosuke\dbml\Metadata\CompatiblePlatform $platform, string $operator, ?string $operand1, $operand2 )
Parameter
type name summary
​?CompatiblePlatform $platform
​string $operator
​?string $operand1
$operand2
Prototype
kind source summary
​override Expression::__construct() コンストラクタ

[m] __toString 文字列表現を返す

文字列表現を返す
public function __toString(): string
Return
type summary
​string
Prototype
kind source summary
​implement Stringable::__toString()

[m] not 否定する

否定する
public function not(): ryunosuke\dbml\Query\Expression\Operator
Return
type summary
Operator

[m] lazy callStatic で作成したインスタンスを後初期化する

callStatic で作成したインスタンスを後初期化する
public function lazy( ?string $operand1, ?ryunosuke\dbml\Metadata\CompatiblePlatform $platform = null ): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​?string $operand1
​?CompatiblePlatform $platform = null
Return
type summary
Operator

[M] case CASE ~ END 構文

CASE ~ END 構文
public static function case( null|string|ryunosuke\dbml\Query\Queryable $expr, array $whens, mixed $else = null ): ryunosuke\dbml\Query\Expression\Expression|ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
​null|​string|​Queryable $expr 対象カラム。null 指定時は CASE WHEN 構文になる
​array $whens [条件 => 値]の配列
​mixed $else = null else 句。未指定時は else 句なし
Return
type summary
Expression|​Expression CASE ~ END 構文の Expression インスタンス
Prototype
kind source summary
​inherit Expression::case() CASE ~ END 構文

[M] over OVER 句を生成する

OVER 句を生成する
public static function over( $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\Expression\Expression
Parameter
type name summary
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
Expression
Prototype
kind source summary
​inherit Expression::over() OVER 句を生成する
See
type summary
Expression::window()

[M] window 裸の OVER 句を生成する

裸の OVER 句を生成する
public static function window( $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\Expression\Expression

エスケープなどは一切行われないので注意(OVER でリテラルを指定するシチュエーションが少ないため)。 ただし Queryable は受け付ける。

$frame は使い慣れないと呪文みたいな句になるので簡易的に与えられるようにしてある。 文字列を渡せばそのまま埋め込まれるので、簡易指定が不要な場合はそのまま与えればよい。 下記のようにキーがモード、値が式に対応する(配列の場合は BETWEEN になる)。

['ROWS' => null]; // ROWS UNBOUNDED PRECEDING

['ROWS' => 0]; // ROWS CURRENT ROW

['ROWS' => [-1, +1]]; // ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING

Parameter
type name summary
$partitionBy = []
$orderBy = []
$frame = null
Return
type summary
Expression
Prototype
kind source summary
​inherit Expression::window() 裸の OVER 句を生成する

[M] forge 値を Expression 化して返す

値を Expression 化して返す
public static function forge(mixed $expr): mixed

変換できなそうならそのまま返す。

# 素の文字列はそのまま文字列のまま返す $expr = Expression::forge('hoge'); // string: hoge # "NULL" という文字列は expression を返す $expr = Expression::forge("NULL"); // Expression: "NULL" # (が含まれているなら Expression を返す $expr = Expression::forge("NOW()"); // Expression: "NOW()" # 数値型なら Expression を返す $expr = Expression::forge(123); // Expression: "123" $expr = Expression::forge(1.2); // Expression: "1.2" # 真偽値なら数値 Expression を返す $expr = Expression::forge(true); // Expression: "1" $expr = Expression::forge(false); // Expression: "0"
Parameter
type name summary
​mixed $expr
Return
type summary
​mixed
Prototype
kind source summary
​inherit Expression::forge() 値を Expression 化して返す

[m] setParams

public function setParams(array $params)
Parameter
type name summary
​array $params
Prototype
kind source summary
​inherit Expression::setParams()

[m] getParams パラメータを返す

パラメータを返す
public function getParams(): array
Return
type summary
​array
Prototype
kind source summary
​inherit Expression::getParams() パラメータを返す

[m] getQuery クエリ文字列を返す

クエリ文字列を返す
public function getQuery(): string
Return
type summary
​string
Prototype
kind source summary
​inherit Expression::getQuery() クエリ文字列を返す

[m] merge パラメータをマージして文字列表現を返す

パラメータをマージして文字列表現を返す
public function merge(?array &$params): string

クエリ文字列を返し、引数配列にパラメータが追加される

Parameter
type name summary
​?array &$params
Return
type summary
​string
Prototype
kind source summary
​inherit Expression::merge() パラメータをマージして文字列表現を返す

[M] insteadof

public static function insteadof(?string $classname = null)
Parameter
type name summary
​?string $classname = null
Prototype
kind source summary
​instead FactoryTrait::insteadof()

[M] new

public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
Parameter
type name summary
...$arguments
Return
type summary
FactoryTrait
Prototype
kind source summary
​instead FactoryTrait::new()

[M] is 値に応じてよしなに等価比較

値に応じてよしなに等価比較
public static function is(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$args
Return
type summary
Operator

[M] equal = 演算子

= 演算子
public static function equal(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] spaceship <=> 演算子

<=> 演算子
public static function spaceship(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] in IN 演算子

IN 演算子
public static function in(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$args
Return
type summary
Operator

[M] nullIn NULL 許容 IN 演算子

NULL 許容 IN 演算子
public static function nullIn(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$args
Return
type summary
Operator

[M] lt < 演算子

< 演算子
public static function lt(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] lte <= 演算子

<= 演算子
public static function lte(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] gt > 演算子

> 演算子
public static function gt(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] gte >= 演算子

>= 演算子
public static function gte(mixed $value): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $value
Return
type summary
Operator

[M] between BETWEEN 演算子

BETWEEN 演算子
public static function between( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $min
​mixed $max
Return
type summary
Operator

[M] range (~) 演算子

(~) 演算子
public static function range( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $min
​mixed $max
Return
type summary
Operator

[M] rangeLte [~) 演算子

[~) 演算子
public static function rangeLte( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $min
​mixed $max
Return
type summary
Operator

[M] rangeGte (~] 演算子

(~] 演算子
public static function rangeGte( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $min
​mixed $max
Return
type summary
Operator

[M] like LIKE 演算子

LIKE 演算子
public static function like(mixed $word): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $word
Return
type summary
Operator

[M] likeLeft %LIKE 演算子

%LIKE 演算子
public static function likeLeft(mixed $word): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $word
Return
type summary
Operator

[M] likeRight LIKE% 演算子

LIKE% 演算子
public static function likeRight(mixed $word): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $word
Return
type summary
Operator

[M] likeIn LIKEIN 演算子

LIKEIN 演算子
public static function likeIn(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$words
Return
type summary
Operator

[M] likeInLeft %LIKEIN 演算子

%LIKEIN 演算子
public static function likeInLeft(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$words
Return
type summary
Operator

[M] likeInRight LIKEIN% 演算子

LIKEIN% 演算子
public static function likeInRight(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed ...$words
Return
type summary
Operator

[M] phrase フレーズ演算子

フレーズ演算子
public static function phrase(mixed $phrase): ryunosuke\dbml\Query\Expression\Operator
Parameter
type name summary
​mixed $phrase
Return
type summary
Operator

[N] ryunosuke\dbml\Query\Pagination\

[C] Paginator クエリビルダを渡して paginate するとページングしてくれるクラス

クエリビルダを渡して paginate するとページングしてくれるクラス

Sequencer と比較して下記の特徴がある。

  • ページ指定で一気に読み飛ばせる
    • 1ページ100件なら11ページへ行くことで一気に1000件飛ばすことができる
    • これは逆にデメリットでもあり、あまりに先まで読み飛ばすとその分パフォーマンスは低下する(9999ページとか)
  • 全件数表示できる
    • 「1001~1100 件目/3000 件中」のような表示
  • 件数取得を伴うので遅い
    • ↑のような表示のためではなく「何ページあるか?」の計算にどうしても必要
    • ただし mysql の場合は SQL_CALC_FOUND_ROWS + FOUND_ROWS() を用いて高速化される
  • 「ページ」という概念上、行の増減があると不整合が発生する
    • 2ページを見ている時に2ページ目以内の行が削除されると、3ページへ遷移した場合に見落としが発生する(逆に、追加されると同じ行が出現したりする)

要するに普通のページネータである。いわゆるページング(件数少なめ)として使用する。

$paginator = new Paginator($db->select('table_name', 'other where')); // 2ページ目のレコードを取得する $paginator->paginate(2, '1ページ内のアイテム数' [, '表示するページ数']); // ページ内アイテムを表示 var_dump($paginator->getItems()); // IteratorAggregate を実装してるので foreach でも回せる foreach ($paginator as $item) { var_dump($item); }
Implements
type summary
IteratorAggregate
Countable
Traversable
Uses
type summary
IteratorTrait イテレータ(主に結果セット)を利用しやすくするための trait

[m] __construct コンストラクタ

コンストラクタ
public function __construct(ryunosuke\dbml\Query\SelectBuilder $builder)
Parameter
type name summary
SelectBuilder $builder

[m] paginate 現在ページとページ内アイテム数を設定する

現在ページとページ内アイテム数を設定する
public function paginate( int $currentpage, int $countperpage ): ryunosuke\dbml\Query\Pagination\Paginator
Parameter
type name summary
​int $currentpage
​int $countperpage
Return
type summary
Paginator

[m] getItems 現在アイテムを取得する

現在アイテムを取得する
public function getItems(): array
Return
type summary
​array

[m] getPage 現在ページを返す

現在ページを返す
public function getPage(): int
Return
type summary
​int

[m] getFirst 最初のインデックスを返す

最初のインデックスを返す
public function getFirst(): ?int

総数が0の時はnullを返す

Return
type summary
​?int

[m] getLast 最後のインデックスを返す

最後のインデックスを返す
public function getLast(): ?int

総数が0の時はnullを返す

Return
type summary
​?int

[m] getTotal 全アイテム数を返す

全アイテム数を返す
public function getTotal(): int
Return
type summary
​int

[m] getPageRange 表示ページを配列で返す

表示ページを配列で返す
public function getPageRange(?int $shownPage = null): array

$shownPage 表示するページ数。奇数が望ましい。省略時全ページ表示。

Parameter
type name summary
​?int $shownPage = null
Return
type summary
​array

[m] getPageCount 全ページ数を返す

全ページ数を返す
public function getPageCount(): int
Return
type summary
​int

[m] hasPrev 前ページが存在するかを返す

前ページが存在するかを返す
public function hasPrev(): bool
Return
type summary
​bool

[m] hasNext 次ページが存在するかを返す

次ページが存在するかを返す
public function hasNext(): bool
Return
type summary
​bool

[C] Sequencer クエリビルダと条件カラムを渡して sequence するとシーケンシャルアクセスしてくれるクラス

クエリビルダと条件カラムを渡して sequence するとシーケンシャルアクセスしてくれるクラス

Paginator と比較して下記の特徴がある。

  • 読み飛ばすことが出来ない
    • ただし付随条件や id を直指定することで「当たり」をつけることは可能
  • 全件数表示できない
    • 次へ次へと進んで行ってもいつ終わるのか見当がつけられない
  • 比較的速い
    • ただし付随条件によるインデックスの使用可否によっては速くならないので注意
  • 「前/次」という概念上、行の増減で不整合が発生しない

「前・次のN件」(件数多め)のような UI で使用する。

$sequencer = new Sequencer($db->select('table_name', 'other where')); // id が 150 以上のレコードを 50 件取得 $sequencer->sequence(['id' => 150], 50 [, '昇順降順フラグ']); // ページ内アイテムを表示 var_dump($sequencer->getItems()); // IteratorAggregate を実装してるので foreach でも回せる foreach ($sequencer as $item) { var_dump($item); }
Implements
type summary
IteratorAggregate
Countable
Traversable
Uses
type summary
IteratorTrait イテレータ(主に結果セット)を利用しやすくするための trait

[m] __construct コンストラクタ

コンストラクタ
public function __construct(ryunosuke\dbml\Query\SelectBuilder $builder)
Parameter
type name summary
SelectBuilder $builder

[m] sequence 読み取り範囲を設定する

読み取り範囲を設定する
public function sequence( array $condition, int $count, bool $orderbyasc = true ): ryunosuke\dbml\Query\Pagination\Sequencer

$condition は SIGNED な INT カラムを1つだけ含む配列である必要がある。なぜならば

  • 2つ以上のタプルの大小関係定義が困難

が理由(大抵の場合 AUTO INCREMENT だろうから負数だったりタプルだったりは考慮しないことにする)。 もっとも大抵は主キー、あるいはインデックスカラムでほぼ固定だろう。

Parameter
type name summary
​array $condition
​int $count
​bool $orderbyasc = true
Return
type summary
Sequencer

[m] getItems 現在アイテムを取得する

現在アイテムを取得する
public function getItems(): array
Return
type summary
​array

[m] hasMore 次アイテムが存在するかを返す

次アイテムが存在するかを返す
public function hasMore(): bool
Return
type summary
​bool

[N] ryunosuke\dbml\Transaction\

[C] Transaction トランザクションを表すクラス

トランザクションを表すクラス

メイン処理に加えて、

  • リトライを設定できる
  • 各種イベント(begin, commit 等)を設定できる
  • 分離レベルを指定できる

などの特徴がある。

リトライ

「リトライするか?」の判定は $retryable に「リトライ回数と例外オブジェクトを受け取り真偽値を返す」クロージャを設定する。 例外発生時にそのクロージャが呼び出され、 float が返って来たらその分待機してリトライ処理を行う。

イベント

イベント系メソッドは内部的には配列で保持され、保持している分が全て実行される。 例えば main(function(){}) はイベントの設定ではなく追加となる。 完全に置換するには main([function(){}]) のように配列で与える必要がある。

イベントはキーを持つ。このキーは追加/上書きの判定に使用したり、実行順を制御する。 main だけは特例で第2引数に前の返り値が渡ってチェーンされる(チェーンの最初は渡ってこない。つまり func_num_args などで判定可能)。

$tx = new Transaction($db); $tx->main(function($db, $prev) {return $prev + 1;}, 2); // A $tx->main(function($db, $prev = 0) {return $prev + 1;}, 1); // B $tx->main(function($db, $prev) {return $prev + 1;}, 3); // C $tx->perform(); // =3

上記はイベント名を指定して追加しているので、実行順は B -> A -> C となる。 かつチェーンを利用しているので、A , C にはその前段階の結果が第2引数で渡ってくる。 なお、イベント名は文字列でも良い。その場合の順番は SORT_REGULAR に従う。

イベントの種類は下記。

  • トランザクションのそれぞれのイベント
    • begin(\Closure(Connection $c))
    • commit(\Closure(Connection $c))
    • rollback(\Closure(Connection $c))
  • トランザクションのメイン処理
    • main(\Closure(Database $db, $prev_return))
  • トランザクション失敗時のイベント(リトライ時はトランザクションのたびに実行される)
    • fail(\Closure(Expcetion $exception))
  • トランザクション完了時のイベント
    • done(\Closure(mixed $return))
  • トランザクションリトライ時のイベント
    • retry(\Closure(int $retryCount))
  • 処理失敗時のイベント (リトライに依らず常に1回のみコール)
    • catch(Expcetion $exception)
  • 処理完了時のイベント (リトライに依らず常に1回のみコール)
    • finish()

いくつかよくありそうなケースの呼び出しフローを下記に例として挙げる(ネストはトランザクションを表す)。

  • main が例外を投げなく、リトライもされない最もシンプルな例

    • begin
      • main
    • commit
    • done
    • finish
  • main が例外を投げるが、リトライはされない例

    • begin
      • main(throw)
    • rollback
    • fail
    • catch
    • finish
  • main が例外を投げるが、リトライで成功する例

    • begin
      • main(throw)
    • rollback
    • fail
    • retry
    • begin
      • main
    • commit
    • done
    • finish
  • main が例外を投げて、リトライでも失敗する例

    • begin
      • main(throw)
    • rollback
    • fail
    • retry
    • begin
      • main(throw)
    • rollback
    • fail
    • catch
    • finish
Uses
type summary
DebugInfoTrait
OptionTrait オプションを保持し、get/set できるようにする trait

[C] READ_UNCOMMITTED

public const int READ_UNCOMMITTED = 1

[C] READ_COMMITTED

public const int READ_COMMITTED = 2

[C] REPEATABLE_READ

public const int REPEATABLE_READ = 3

[C] SERIALIZABLE

public const int SERIALIZABLE = 4

[p] $isolationLevel トランザクション分離レベル

トランザクション分離レベル
public Doctrine\DBAL\TransactionIsolationLevel $isolationLevel

Type: TransactionIsolationLevel

[p] $logger ロガーインスタンス

ロガーインスタンス
public Psr\Log\LoggerInterface $logger

Type: LoggerInterface

[p] $begin begin イベント配列

begin イベント配列
public \Closure[] $begin

Type: Closure[]

[p] $commit commit イベント配列

commit イベント配列
public \Closure[] $commit

Type: Closure[]

[p] $rollback rollback イベント配列

rollback イベント配列
public \Closure[] $rollback

Type: Closure[]

[p] $main main イベント配列

main イベント配列
public \Closure[] $main

Type: Closure[]

[p] $done done イベント配列

done イベント配列
public \Closure[] $done

Type: Closure[]

[p] $fail fail イベント配列

fail イベント配列
public \Closure[] $fail

Type: Closure[]

[p] $retry retry イベント配列

retry イベント配列
public \Closure[] $retry

Type: Closure[]

[p] $catch catch イベント配列

catch イベント配列
public \Closure[] $catch

Type: Closure[]

[p] $finish finish イベント配列

finish イベント配列
public \Closure[] $finish

Type: Closure[]

[p] $retryable リトライ判定処理

リトライ判定処理
public \Closure $retryable

Type: Closure

[M] getDefaultOptions オプションのデフォルト値を返す static メソッド

オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array

このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。

Return
type summary
​array
Prototype
kind source summary
​override OptionTrait::getDefaultOptions() オプションのデフォルト値を返す static メソッド

[m] __construct コンストラクタ

コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, array $options = [] )
Parameter
type name summary
Database $database
​array $options = []

[m] __get

public function __get(string $name): mixed
Parameter
type name summary
​string $name
Return
type summary
​mixed

[m] __set

public function __set( string $name, mixed $value )
Parameter
type name summary
​string $name
​mixed $value

[m] __call

public function __call( string $name, array $arguments ): mixed
Parameter
type name summary
​string $name
​array $arguments
Return
type summary
​mixed

[m] __invoke

public function __invoke(bool $throwable)
Parameter
type name summary
​bool $throwable

[m] begin begin イベントを設定する

begin イベントを設定する
public function begin( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setBegin begin イベント配列を設定する

begin イベント配列を設定する
public function setBegin(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getBegin begin イベント配列を取得する

begin イベント配列を取得する
public function getBegin(): \Closure[]
Return
type summary
Closure[]

[m] commit commit イベントを設定する

commit イベントを設定する
public function commit( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setCommit commit イベント配列を設定する

commit イベント配列を設定する
public function setCommit(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getCommit commit イベント配列を取得する

commit イベント配列を取得する
public function getCommit(): \Closure[]
Return
type summary
Closure[]

[m] rollback rollback イベントを設定する

rollback イベントを設定する
public function rollback( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setRollback rollback イベント配列を設定する

rollback イベント配列を設定する
public function setRollback(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getRollback rollback イベント配列を取得する

rollback イベント配列を取得する
public function getRollback(): \Closure[]
Return
type summary
Closure[]

[m] main main イベントを設定する

main イベントを設定する
public function main( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setMain main イベント配列を設定する

main イベント配列を設定する
public function setMain(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getMain main イベント配列を取得する

main イベント配列を取得する
public function getMain(): \Closure[]
Return
type summary
Closure[]

[m] done done イベントを設定する

done イベントを設定する
public function done( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setDone done イベント配列を設定する

done イベント配列を設定する
public function setDone(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getDone done イベント配列を取得する

done イベント配列を取得する
public function getDone(): \Closure[]
Return
type summary
Closure[]

[m] fail fail イベントを設定する

fail イベントを設定する
public function fail( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setFail fail イベント配列を設定する

fail イベント配列を設定する
public function setFail(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getFail fail イベント配列を取得する

fail イベント配列を取得する
public function getFail(): \Closure[]
Return
type summary
Closure[]

[m] retry retry イベントを設定する

retry イベントを設定する
public function retry( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setRetry retry イベント配列を設定する

retry イベント配列を設定する
public function setRetry(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getRetry retry イベント配列を取得する

retry イベント配列を取得する
public function getRetry(): \Closure[]
Return
type summary
Closure[]

[m] catch catch イベントを設定する

catch イベントを設定する
public function catch( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setCatch catch イベント配列を設定する

catch イベント配列を設定する
public function setCatch(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getCatch catch イベント配列を取得する

catch イベント配列を取得する
public function getCatch(): \Closure[]
Return
type summary
Closure[]

[m] finish finish イベントを設定する

finish イベントを設定する
public function finish( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
$callback
$key = null
Return
type summary
Transaction

[m] setFinish finish イベント配列を設定する

finish イベント配列を設定する
public function setFinish(array $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​array $closure
Return
type summary
Transaction

[m] getFinish finish イベント配列を取得する

finish イベント配列を取得する
public function getFinish(): \Closure[]
Return
type summary
Closure[]

[m] master トランザクションをマスター接続で実行するようにする

トランザクションをマスター接続で実行するようにする
public function master(): ryunosuke\dbml\Transaction\Transaction
Return
type summary
Transaction

[m] slave トランザクションをスレーブ接続で実行するようにする

トランザクションをスレーブ接続で実行するようにする
public function slave(): ryunosuke\dbml\Transaction\Transaction
Return
type summary
Transaction

[m] perform トランザクションとして実行する

トランザクションとして実行する
public function perform(bool $throwable = true)

$throwable は catch で代替可能なので近い将来削除される。

Parameter
type name summary
​bool $throwable = true

[m] preview トランザクションとして実行後、強制的に rollback する

トランザクションとして実行後、強制的に rollback する
public function preview(?array &$queries = [])

一連の実行クエリが得られるが、あくまでDBレイヤーのトランザクションなので、 php的にファイルを変更したり、何かを送信したりしてもそれは戻らない。

Parameter
type name summary
​?array &$queries = []

[m] __debugInfo

public function __debugInfo(): array
Return
type summary
​array
Prototype
kind source summary
​instead DebugInfoTrait::__debugInfo()

[m] checkUnknownOption

public function checkUnknownOption(array $options): bool
Parameter
type name summary
​array $options
Return
type summary
​bool
Prototype
kind source summary
​instead OptionTrait::checkUnknownOption()

[m] isolationLevel トランザクション分離レベルを設定・取得する

トランザクション分離レベルを設定・取得する
public function isolationLevel(mixed $int = null): ryunosuke\dbml\Transaction\Transaction|int
Parameter
type name summary
​mixed $int = null
Return
type summary
Transaction|​int

[m] getIsolationLevel トランザクション分離レベルを取得する

トランザクション分離レベルを取得する
public function getIsolationLevel(): int
Return
type summary
​int

[m] setIsolationLevel トランザクション分離レベルを設定する

トランザクション分離レベルを設定する
public function setIsolationLevel(mixed $int): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​mixed $int
Return
type summary
Transaction

[m] getCheckImplicit 暗黙コミット/ロールバックを検出するかを取得する

暗黙コミット/ロールバックを検出するかを取得する
public function getCheckImplicit(): bool
Return
type summary
​bool

[m] setCheckImplicit 暗黙コミット/ロールバックを検出するかを設定する

暗黙コミット/ロールバックを検出するかを設定する
public function setCheckImplicit(mixed $bool): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
​mixed $bool
Return
type summary
Transaction

[m] logger ロガーインスタンスを設定・取得する

ロガーインスタンスを設定・取得する
public function logger(Psr\Log\LoggerInterface $logger = null): ryunosuke\dbml\Transaction\Transaction|int
Parameter
type name summary
LoggerInterface $logger = null
Return
type summary
Transaction|​int

[m] getLogger ロガーインスタンスを取得する

ロガーインスタンスを取得する
public function getLogger(): Psr\Log\LoggerInterface
Return
type summary
LoggerInterface

[m] setLogger ロガーインスタンスを設定する

ロガーインスタンスを設定する
public function setLogger(Psr\Log\LoggerInterface $logger): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
LoggerInterface $logger
Return
type summary
Transaction

[m] retryable リトライ判定処理を設定・取得する

リトライ判定処理を設定・取得する
public function retryable(mixed $closure = null): ryunosuke\dbml\Transaction\Transaction|\Closure
Parameter
type name summary
​mixed $closure = null
Return
type summary
Transaction|​Closure

[m] getRetryable リトライ判定処理を取得する

リトライ判定処理を取得する
public function getRetryable(): \Closure
Return
type summary
Closure

[m] setRetryable リトライ判定処理を設定する

リトライ判定処理を設定する
public function setRetryable(\Closure $closure): ryunosuke\dbml\Transaction\Transaction
Parameter
type name summary
Closure $closure
Return
type summary
Transaction

[N] ryunosuke\dbml\Types\

[C] EnumType php の enum と db の型を紐づけるクラス

php の enum と db の型を紐づけるクラス

他の型のように個別クラスで扱うのではなく、インスタンス単位で扱う。 ちなみに DB 側のいわゆる ENUM 型は一切関係ない(別に使っても良いが)。

register しておけば select/affect 時に自動で enum との変換が行われるようになる。

Hierarchy

Parents
type summary
AbstractType
Type The base class for so-called Doctrine mapping types.

[M] register 型名と EnumClass をまとめて登録する

型名と EnumClass をまとめて登録する
public static function register( Doctrine\DBAL\Platforms\AbstractPlatform $platform, array $typeMap, bool $throw = true ): array|ryunosuke\dbml\Types\EnumType[]
// こうしておけば AutoCastType とかパイプ修飾とかで enum の値で返されるようになる EnumType::register($db->getPlatform(), [ 'article_status' => ArticleStatus::class, 'public_status' => PublicStatus::class, ]);
Parameter
type name summary
AbstractPlatform $platform
​array $typeMap
​bool $throw = true 重複登録で例外を投げるか?(基本的にテスト・デバッグ目的であり明示指定は非推奨)
Return
type summary
​array|​EnumType[] 登録した Type オブジェクトを返すが特に用途はない(getTypeRegistry 経由で取得可能)

[m] getName Gets the name of this type.

Gets the name of this type.
public function getName(): string
Return
type summary
​string
Prototype
kind source summary
​override Type::getName() Gets the name of this type.

[m] getEnum

public function getEnum(): string
Return
type summary
​string

[m] convertToDatabaseValue Converts a value from its PHP representation to its database representation

Converts a value from its PHP representation to its database representation
public function convertToDatabaseValue( mixed $value, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): mixed

of this type.

Parameter
type name summary
​mixed $value The value to convert.
AbstractPlatform $platform The currently used database platform.
Return
type summary
​mixed
Throws
type summary
ConversionException
Prototype
kind source summary
​override Type::convertToDatabaseValue() Converts a value from its PHP representation to its database representation

[m] convertToPHPValue Converts a value from its database representation to its PHP representation

Converts a value from its database representation to its PHP representation
public function convertToPHPValue( mixed $value, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): ?\BackedEnum

of this type.

Parameter
type name summary
​mixed $value The value to convert.
AbstractPlatform $platform The currently used database platform.
Return
type summary
​?BackedEnum
Throws
type summary
ConversionException
Prototype
kind source summary
​override Type::convertToPHPValue() Converts a value from its database representation to its PHP representation

[m] getSQLDeclaration Gets the SQL declaration snippet for a column of this type.

Gets the SQL declaration snippet for a column of this type.
public function getSQLDeclaration( array|mixed[] $column, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​array|​mixed[] $column The column definition
AbstractPlatform $platform The currently used database platform.
Return
type summary
​string
Prototype
kind source summary
​inherit AbstractType::getSQLDeclaration() Gets the SQL declaration snippet for a column of this type.

[m] __construct

final public function __construct()
Prototype
kind source summary
​inherit Type::__construct()
See
type summary
Type::addType()

[M] getTypeRegistry

final public static function getTypeRegistry(): Doctrine\DBAL\Types\TypeRegistry
Return
type summary
TypeRegistry
Prototype
kind source summary
​inherit Type::getTypeRegistry()

[M] getType Factory method to create type instances.

Factory method to create type instances.
public static function getType(string $name): Doctrine\DBAL\Types\Type

Type instances are implemented as flyweights.

Parameter
type name summary
​string $name The name of the type (as returned by getName()).
Return
type summary
Type
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::getType() Factory method to create type instances.

[M] lookupName Finds a name for the given type.

Finds a name for the given type.
public static function lookupName(Doctrine\DBAL\Types\Type $type): string
Parameter
type name summary
Type $type
Return
type summary
​string
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::lookupName() Finds a name for the given type.

[M] addType Adds a custom type to the type map.

Adds a custom type to the type map.
public static function addType( string $name, class-string $className ): void
Parameter
type name summary
​string $name The name of the type. This should correspond to what getName() returns.
class-string $className The class name of the custom type.
Return
type summary
​void
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::addType() Adds a custom type to the type map.

[M] hasType Checks if exists support for a type.

Checks if exists support for a type.
public static function hasType(string $name): bool
Parameter
type name summary
​string $name The name of the type.
Return
type summary
​bool TRUE if type is supported; FALSE otherwise.
Prototype
kind source summary
​inherit Type::hasType() Checks if exists support for a type.

[M] overrideType Overrides an already defined type to use a different implementation.

Overrides an already defined type to use a different implementation.
public static function overrideType( string $name, class-string $className ): void
Parameter
type name summary
​string $name
class-string $className
Return
type summary
​void
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::overrideType() Overrides an already defined type to use a different implementation.

[m] getBindingType Gets the (preferred) binding type for values of this type that

Gets the (preferred) binding type for values of this type that
public function getBindingType(): int

can be used when binding parameters to prepared statements.

This method should return one of the Doctrine\DBAL\ParameterType constants.

Return
type summary
​int
Prototype
kind source summary
​inherit Type::getBindingType() Gets the (preferred) binding type for values of this type that
See
type summary
ParameterType

[M] getTypesMap Gets the types array map which holds all registered types and the corresponding

Gets the types array map which holds all registered types and the corresponding
public static function getTypesMap(): array

type class

Return
type summary
​array string>
Prototype
kind source summary
​inherit Type::getTypesMap() Gets the types array map which holds all registered types and the corresponding

[m] canRequireSQLConversion Does working with this column require SQL conversion functions?

Does working with this column require SQL conversion functions?
public function canRequireSQLConversion(): bool

This is a metadata function that is required for example in the ORM. Usage of convertToDatabaseValueSQL and convertToPHPValueSQL works for any type and mostly does nothing. This method can additionally be used for optimization purposes.

Return
type summary
​bool
Prototype
kind source summary
​inherit Type::canRequireSQLConversion() Does working with this column require SQL conversion functions?

[m] convertToDatabaseValueSQL Modifies the SQL expression (identifier, parameter) to convert to a database value.

Modifies the SQL expression (identifier, parameter) to convert to a database value.
public function convertToDatabaseValueSQL( string $sqlExpr, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​string $sqlExpr
AbstractPlatform $platform
Return
type summary
​string
Prototype
kind source summary
​inherit Type::convertToDatabaseValueSQL() Modifies the SQL expression (identifier, parameter) to convert to a database value.

[m] convertToPHPValueSQL Modifies the SQL expression (identifier, parameter) to convert to a PHP value.

Modifies the SQL expression (identifier, parameter) to convert to a PHP value.
public function convertToPHPValueSQL( string $sqlExpr, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​string $sqlExpr
AbstractPlatform $platform
Return
type summary
​string
Prototype
kind source summary
​inherit Type::convertToPHPValueSQL() Modifies the SQL expression (identifier, parameter) to convert to a PHP value.

[m] getMappedDatabaseTypes Gets an array of database types that map to this Doctrine type.

Gets an array of database types that map to this Doctrine type.
public function getMappedDatabaseTypes(Doctrine\DBAL\Platforms\AbstractPlatform $platform): string[]
Parameter
type name summary
AbstractPlatform $platform
Return
type summary
​string[]
Prototype
kind source summary
​inherit Type::getMappedDatabaseTypes() Gets an array of database types that map to this Doctrine type.

[m] requiresSQLCommentHint If this Doctrine Type maps to an already mapped database type,

If this Doctrine Type maps to an already mapped database type,
public function requiresSQLCommentHint(Doctrine\DBAL\Platforms\AbstractPlatform $platform): bool

reverse schema engineering can't tell them apart. You need to mark one of those types as commented, which will have Doctrine use an SQL comment to typehint the actual Doctrine Type.

Parameter
type name summary
AbstractPlatform $platform
Return
type summary
​bool
Prototype
kind source summary
​inherit Type::requiresSQLCommentHint() If this Doctrine Type maps to an already mapped database type,

[C] AbstractType

Hierarchy

Parents
type summary
Type The base class for so-called Doctrine mapping types.

[m] getSQLDeclaration Gets the SQL declaration snippet for a column of this type.

Gets the SQL declaration snippet for a column of this type.
public function getSQLDeclaration( array|mixed[] $column, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​array|​mixed[] $column The column definition
AbstractPlatform $platform The currently used database platform.
Return
type summary
​string
Prototype
kind source summary
​override Type::getSQLDeclaration() Gets the SQL declaration snippet for a column of this type.

[m] getName Gets the name of this type.

Gets the name of this type.
public function getName(): string
Return
type summary
​string
Prototype
kind source summary
​override Type::getName() Gets the name of this type.

[m] convertToDatabaseValue Converts a value from its PHP representation to its database representation

Converts a value from its PHP representation to its database representation
public function convertToDatabaseValue( mixed $value, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): mixed

of this type.

Parameter
type name summary
​mixed $value The value to convert.
AbstractPlatform $platform The currently used database platform.
Return
type summary
​mixed
Throws
type summary
ConversionException
Prototype
kind source summary
​override Type::convertToDatabaseValue() Converts a value from its PHP representation to its database representation

[m] convertToPHPValue <tag_inheritdoc data-type='' data-description=''>Converts a value from its database representation to its PHP representation

Converts a value from its database representation to its PHP representation
public function convertToPHPValue( mixed $value, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): mixed

of this type.

アノテーション出力のため、返り値の型は指定するのが望ましい。

Parameter
type name summary
​mixed $value The value to convert.
AbstractPlatform $platform The currently used database platform.
Return
type summary
​mixed
Throws
type summary
ConversionException
Prototype
kind source summary
​override Type::convertToPHPValue() Converts a value from its database representation to its PHP representation

[m] __construct

final public function __construct()
Prototype
kind source summary
​inherit Type::__construct()
See
type summary
Type::addType()

[M] getTypeRegistry

final public static function getTypeRegistry(): Doctrine\DBAL\Types\TypeRegistry
Return
type summary
TypeRegistry
Prototype
kind source summary
​inherit Type::getTypeRegistry()

[M] getType Factory method to create type instances.

Factory method to create type instances.
public static function getType(string $name): Doctrine\DBAL\Types\Type

Type instances are implemented as flyweights.

Parameter
type name summary
​string $name The name of the type (as returned by getName()).
Return
type summary
Type
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::getType() Factory method to create type instances.

[M] lookupName Finds a name for the given type.

Finds a name for the given type.
public static function lookupName(Doctrine\DBAL\Types\Type $type): string
Parameter
type name summary
Type $type
Return
type summary
​string
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::lookupName() Finds a name for the given type.

[M] addType Adds a custom type to the type map.

Adds a custom type to the type map.
public static function addType( string $name, class-string $className ): void
Parameter
type name summary
​string $name The name of the type. This should correspond to what getName() returns.
class-string $className The class name of the custom type.
Return
type summary
​void
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::addType() Adds a custom type to the type map.

[M] hasType Checks if exists support for a type.

Checks if exists support for a type.
public static function hasType(string $name): bool
Parameter
type name summary
​string $name The name of the type.
Return
type summary
​bool TRUE if type is supported; FALSE otherwise.
Prototype
kind source summary
​inherit Type::hasType() Checks if exists support for a type.

[M] overrideType Overrides an already defined type to use a different implementation.

Overrides an already defined type to use a different implementation.
public static function overrideType( string $name, class-string $className ): void
Parameter
type name summary
​string $name
class-string $className
Return
type summary
​void
Throws
type summary
Exception
Prototype
kind source summary
​inherit Type::overrideType() Overrides an already defined type to use a different implementation.

[m] getBindingType Gets the (preferred) binding type for values of this type that

Gets the (preferred) binding type for values of this type that
public function getBindingType(): int

can be used when binding parameters to prepared statements.

This method should return one of the Doctrine\DBAL\ParameterType constants.

Return
type summary
​int
Prototype
kind source summary
​inherit Type::getBindingType() Gets the (preferred) binding type for values of this type that
See
type summary
ParameterType

[M] getTypesMap Gets the types array map which holds all registered types and the corresponding

Gets the types array map which holds all registered types and the corresponding
public static function getTypesMap(): array

type class

Return
type summary
​array string>
Prototype
kind source summary
​inherit Type::getTypesMap() Gets the types array map which holds all registered types and the corresponding

[m] canRequireSQLConversion Does working with this column require SQL conversion functions?

Does working with this column require SQL conversion functions?
public function canRequireSQLConversion(): bool

This is a metadata function that is required for example in the ORM. Usage of convertToDatabaseValueSQL and convertToPHPValueSQL works for any type and mostly does nothing. This method can additionally be used for optimization purposes.

Return
type summary
​bool
Prototype
kind source summary
​inherit Type::canRequireSQLConversion() Does working with this column require SQL conversion functions?

[m] convertToDatabaseValueSQL Modifies the SQL expression (identifier, parameter) to convert to a database value.

Modifies the SQL expression (identifier, parameter) to convert to a database value.
public function convertToDatabaseValueSQL( string $sqlExpr, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​string $sqlExpr
AbstractPlatform $platform
Return
type summary
​string
Prototype
kind source summary
​inherit Type::convertToDatabaseValueSQL() Modifies the SQL expression (identifier, parameter) to convert to a database value.

[m] convertToPHPValueSQL Modifies the SQL expression (identifier, parameter) to convert to a PHP value.

Modifies the SQL expression (identifier, parameter) to convert to a PHP value.
public function convertToPHPValueSQL( string $sqlExpr, Doctrine\DBAL\Platforms\AbstractPlatform $platform ): string
Parameter
type name summary
​string $sqlExpr
AbstractPlatform $platform
Return
type summary
​string
Prototype
kind source summary
​inherit Type::convertToPHPValueSQL() Modifies the SQL expression (identifier, parameter) to convert to a PHP value.

[m] getMappedDatabaseTypes Gets an array of database types that map to this Doctrine type.

Gets an array of database types that map to this Doctrine type.
public function getMappedDatabaseTypes(Doctrine\DBAL\Platforms\AbstractPlatform $platform): string[]
Parameter
type name summary
AbstractPlatform $platform
Return
type summary
​string[]
Prototype
kind source summary
​inherit Type::getMappedDatabaseTypes() Gets an array of database types that map to this Doctrine type.

[m] requiresSQLCommentHint If this Doctrine Type maps to an already mapped database type,

If this Doctrine Type maps to an already mapped database type,
public function requiresSQLCommentHint(Doctrine\DBAL\Platforms\AbstractPlatform $platform): bool

reverse schema engineering can't tell them apart. You need to mark one of those types as commented, which will have Doctrine use an SQL comment to typehint the actual Doctrine Type.

Parameter
type name summary
AbstractPlatform $platform
Return
type summary
​bool
Prototype
kind source summary
​inherit Type::requiresSQLCommentHint() If this Doctrine Type maps to an already mapped database type,
コントロールパネル
View
Head
Body