[N] ryunosuke\dbml\ 特定のクラスに依存しない全体仕様を以下に記す。
特定のクラスに依存しない全体仕様を以下に記す。
データベーススキーマ
まず大前提として別スキーマへのクエリは一切サポートしない。 ただし、 ryunosuke\dbml\Gateway\TableGateway や ryunosuke\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 化したり、値以外の入力として使用するのは全く推奨できない。
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
type | summary |
---|---|
Database | |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
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\SelectBuilder や ryunosuke\dbml\Gateway\TableGateway のオプションも複合で与えることができる。 その場合、そのクラスのインスタンスが生成されたときのデフォルト値として作用する。
# defaultOrder は本来 SelectBuilder のオプションだが、 Database のオプションとしても与えることができる $db = new Database($dbconfig, [ 'defaultOrder' => true, ]); $db->selectArray('tablename'); // 上記で false を設定してるので自動で `ORDER BY 主キー` は付かない
つまり実質的には「本ライブラリの設定が全て可能」となる。あまり「この設定はどこのクラスに係るのか?」は気にしなくて良い。
type | name | summary |
---|---|---|
string|array|Connection|Connection[] | $dbconfig |
設定配列 |
array | $options = [] |
|
[m] __isset ゲートウェイオブジェクトがあるかを返す
ゲートウェイオブジェクトがあるかを返す
public function __isset(string $name): bool
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
bool | |
[m] __unset ゲートウェイオブジェクトを伏せる
ゲートウェイオブジェクトを伏せる
public function __unset(string $name)
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();
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
?TableGateway | |
[m] __set サポートされない
サポートされない
public function __set( string $name, mixed $value )
将来のために予約されており、呼ぶと無条件で例外を投げる。
phpstorm が $db->tablename[1]['title'] = 'hoge';
のような式で警告を出すのでそれを抑止する目的もある。
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 を受け付ける。
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 オブジェクト
オブジェクト名が競合している場合は何が返ってくるか未定義。
type | name | summary |
---|---|---|
?string | $objectname = null |
|
type | summary |
---|---|
AbstractAsset | |
[m] echoTableClass 全テーブルの Gateway, Entity を出力する
全テーブルの Gateway, Entity を出力する
public function echoTableClass(string $annotation_namespace = ""): array
テーブル毎に各クラスを生成するのは面倒かつ単純作業なのでそれを自動化したもの。 無ければファイルごと作成し、有れば自動生成部分のみを書き換える。
出力場所は TableMapper に従う(つまり「あるべき場所」に出力され、現在のところそれを変更することはできない)。
type | name | summary |
---|---|---|
string | $annotation_namespace = "" |
アノテーションの名前空間 |
type | summary |
---|---|
array | 追加:'+', 変更:'*', 削除:'-' の結果配列(「削除」とは実際に削除するわけではなく「管理外」程度の意味) |
[m] echoAnnotation コード補完用のアノテーショントレイトを取得する
コード補完用のアノテーショントレイトを取得する
public function echoAnnotation( ?string $namespace = null, ?string $filename = null ): string
存在するテーブル名や tableMapper などを利用して mixin 用のトレイトを作成する。
このメソッドが吐き出したトレイトを @ mixin Hogera
などとすると補完が効くようになる。
type | name | summary |
---|---|---|
?string | $namespace = null |
|
?string | $filename = null |
|
type | summary |
---|---|
string | |
[m] echoPhpStormMeta コード補完用の phpstorm.meta を取得する
コード補完用の phpstorm.meta を取得する
public function echoPhpStormMeta( ?string $namespace = null, ?string $filename = null ): string
存在するテーブル名や tableMapper などを利用して phpstorm.meta を作成する。
type | name | summary |
---|---|---|
?string | $namespace = null |
|
?string | $filename = null |
|
type | summary |
---|---|
string | |
[m] setLogger ロガーを設定する
ロガーを設定する
public function setLogger(Psr\Log\LoggerInterface|Psr\Log\LoggerInterface[]|null $logger): ryunosuke\dbml\Database
配列で 0, master を指定するとマスター接続に設定される。 同様に 1, slave を指定するとスレーブ接続に設定される。
単一のインスタンスを渡した場合は両方に設定される。
type | name | summary |
---|---|---|
LoggerInterface|LoggerInterface[]|null | $logger |
ロガー |
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 時の値が渡ってくる }, ], ]);
type | name | summary |
---|---|---|
array | $castTypes |
|
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);
type | name | summary |
---|---|---|
Connection|bool | $connection |
|
type | summary |
---|---|
Database | |
[m] getConnection 現在のトランザクション接続(Connection)を返す
現在のトランザクション接続(Connection)を返す
public function getConnection(): Doctrine\DBAL\Connection
トランザクション接続とは基本的に「マスター接続」を指す。 シングルコネクション環境なら気にしなくて良い。
type | summary |
---|---|
Connection | |
[m] getMasterConnection マスター接続(Connection)を返す
マスター接続(Connection)を返す
public function getMasterConnection(): Doctrine\DBAL\Connection
type | summary |
---|---|
Connection | |
[m] getSlaveConnection スレーブ接続(Connection)を返す
スレーブ接続(Connection)を返す
public function getSlaveConnection(): Doctrine\DBAL\Connection
type | summary |
---|---|
Connection | |
[m] getConnections コネクション配列を返す
コネクション配列を返す
public function getConnections(): array|Doctrine\DBAL\Connection[]
単一だろうと Master/Slave 構成だろうとインスタンスとしての配列を返す。 例えばマスタースレーブが同じインスタンスの場合は1つしか返さない。
type | summary |
---|---|
array|Connection[] | コネクション配列 |
[m] getCompatibleConnection 互換用コネクションを取得する
互換用コネクションを取得する
public function getCompatibleConnection(?Doctrine\DBAL\Connection $connection = null): ryunosuke\dbml\Metadata\CompatibleConnection
type | name | summary |
---|---|---|
?Connection | $connection = null |
|
type | summary |
---|---|
CompatibleConnection | |
[m] getPlatform dbal のプラットフォームを取得する
dbal のプラットフォームを取得する
public function getPlatform(): Doctrine\DBAL\Platforms\AbstractPlatform
type | summary |
---|---|
AbstractPlatform | |
[m] getCompatiblePlatform 互換用プラットフォームを取得する
互換用プラットフォームを取得する
public function getCompatiblePlatform(): ryunosuke\dbml\Metadata\CompatiblePlatform
type | summary |
---|---|
CompatiblePlatform | |
[m] getSchema スキーマオブジェクトを取得する
スキーマオブジェクトを取得する
public function getSchema(): ryunosuke\dbml\Metadata\Schema
type | summary |
---|---|
Schema | |
[m] getEntityClass テーブル名からエンティティクラス名を取得する
テーブル名からエンティティクラス名を取得する
public function getEntityClass(string $tablename): string
type | name | summary |
---|---|---|
string | $tablename |
|
type | summary |
---|---|
string | |
[m] getGatewayClass テーブル名からゲートウェイクラス名を取得する
テーブル名からゲートウェイクラス名を取得する
public function getGatewayClass(string $tablename): string
type | name | summary |
---|---|---|
string | $tablename |
|
type | summary |
---|---|
string | |
[m] convertEntityName テーブル名からエンティティ名へ変換する
テーブル名からエンティティ名へ変換する
public function convertEntityName(string $tablename): string
type | name | summary |
---|---|---|
string | $tablename |
|
type | summary |
---|---|
string | |
[m] convertSelectTableName エンティティ・ビュー名から取得テーブル名へ変換する
エンティティ・ビュー名から取得テーブル名へ変換する
public function convertSelectTableName(string $targetname): string
type | name | summary |
---|---|---|
string | $targetname |
|
type | summary |
---|---|
string | |
[m] convertAffectTableName エンティティ・ビュー名から更新テーブル名へ変換する
エンティティ・ビュー名から更新テーブル名へ変換する
public function convertAffectTableName(string $targetname): string
type | name | summary |
---|---|---|
string | $targetname |
|
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'); // 上で追加した配列を与えるのと同じ
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()")) |
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
type | name | summary |
---|---|---|
array | $expressions |
|
type | summary |
---|---|
Database | |
[m] getVirtualTable 仮想テーブルを取得する
仮想テーブルを取得する
public function getVirtualTable(string $vtableName): ?array
原則内部向け。
type | name | summary |
---|---|---|
string | $vtableName |
|
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 側の型が活用される箇所はそう多くないが、例えば下記のような処理では上書きすると有用なことがある。
- ryunosuke\dbml\Database::setAutoCastType() による型による自動キャスト
type | name | summary |
---|---|---|
array | $definition |
|
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 時に自動付与される条件となる ], ], // 別キー名に対して上記の構造の繰り返しができる ], // 別外部テーブル名に対して上記の構造の繰り返しができる ], // 別ローカルテーブル名に対して上記の構造の繰り返しができる ]);
type | name | summary |
---|---|---|
array | $relations |
|
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() を呼ぶ。
type | name | summary |
---|---|---|
string | $localTable |
|
string | $foreignTable |
|
array|string | $fkdata |
|
?string | $fkname = null |
|
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() を呼ぶ。
type | name | summary |
---|---|---|
string | $localTable |
|
string | $foreignTable |
|
array|string | $columnsMap |
|
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 指定時はそれぞれで管理される。
type | name | summary |
---|---|---|
bool | $enable |
|
ForeignKeyConstraint|string | $fkey |
|
type | summary |
---|---|
int | |
[m] begin begin
begin
public function begin(): int
type | summary |
---|---|
int | |
[m] commit commit
commit
public function commit(): int
type | summary |
---|---|
int | |
[m] rollback rollback
rollback
public function rollback(): int
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']); });
type | name | summary |
---|---|---|
callable | $main |
|
?callable | $catch = null |
|
array | $options = [] |
|
bool | $throwable = true |
|
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 を参照。
type | name | summary |
---|---|---|
?callable | $main = null |
|
?callable | $catch = null |
|
array | $options = [] |
|
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); });
type | name | summary |
---|---|---|
callable | $main |
|
?array | $options = null |
|
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
type | name | summary |
---|---|---|
string | $expr |
|
mixed | $params = [] |
|
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]
type | name | summary |
---|---|---|
| ...$predicates |
|
type | summary |
---|---|
Expression | |
[m] descriptor 文字列とパラメータから TableDescriptor を生成する
文字列とパラメータから TableDescriptor を生成する
public function descriptor( string $tableDescriptor, array $params = [] ): ryunosuke\dbml\Query\TableDescriptor
type | name | summary |
---|---|---|
string | $tableDescriptor |
|
array | $params = [] |
|
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
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() と同じ。
type | name | summary |
---|---|---|
mixed | $value |
|
?int | $type = null |
|
type | summary |
---|---|
mixed | |
[m] quoteIdentifier 識別子をクオートする
識別子をクオートする
public function quoteIdentifier(string $identifier): string
type | name | summary |
---|---|---|
string | $identifier |
|
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')
type | name | summary |
---|---|---|
Queryable|string | $sql |
|
iterable | $params = [] |
|
type | summary |
---|---|
string | |
[m] warmup 暖気運転を行う
暖気運転を行う
public function warmup(array|string $table_names = []): array
指定テーブルのすべてのインデックスに対して COUNT クエリを発行する。 RDBMS にも依るが、これによって・・・
- レコードがバッファプールに乗る(クラスタードインデックスの場合)
- インデックスがバッファプールに乗る
概して mysql (InnoDB) 用だが、他の RDBMS でも呼んで無駄にはならないはず。 返り値として暖気クエリの結果(現在は [table => [index => COUNT]] を返すが、COUNt 部分は変更されることがある)
type | name | summary |
---|---|---|
array|string | $table_names = [] |
|
type | summary |
---|---|
array | |
[m] fetch フェッチメソッドとクエリとパラメータを指定して実行する
フェッチメソッドとクエリとパラメータを指定して実行する
public function fetch( string $method, $sql, iterable $params = [] )
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', ], ];
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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', ];
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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', ];
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchMethodTrait::fetchPairsWithSql() | レコード[1列目=>2列目]の連想配列を返す |
[m] fetchTuple レコードを返す
レコードを返す
public function fetchTuple( $sql, iterable $params = [] )
このメソッドはフェッチ結果が2件以上だと例外を投げる。 これは
- 1行を期待しているのに WHERE や LIMIT がなく、無駄なクエリになっている
- ryunosuke\dbml\Mixin\FetchMethodTrait::whereInto() の仕様により意図せず配列を与えて WHERE IN になっている
のを予防的に阻止するため必要な仕様である。
$db->fetchTuple('SELECT id, name FROM tablename LIMIT 1'); // results: [ 'id' => 1, 'name' => 'name1', ];
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchMethodTrait::fetchTupleWithSql() | レコードを返す |
[m] fetchValue レコード[1列目]を返す
レコード[1列目]を返す
public function fetchValue( $sql, iterable $params = [] )
このメソッドはフェッチ結果が2件以上だと例外を投げる。 これは
- 1行を期待しているのに WHERE や LIMIT がなく、無駄なクエリになっている
- ryunosuke\dbml\Mixin\FetchMethodTrait::whereInto() の仕様により意図せず配列を与えて WHERE IN になっている
のを予防的に阻止するために必要な仕様である。
$db->fetchValue('SELECT name FROM tablename LIMIT 1'); // results: 'name1';
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchMethodTrait::fetchValueWithSql() | レコード[1列目]を返す |
[m] fetchArrayOrThrow ryunosuke\dbml\Database::fetchArray()") の例外送出版
ryunosuke\dbml\Database::fetchArray() の例外送出版
public function fetchArrayOrThrow( $sql, iterable $params = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchOrThrowTrait::fetchValueOrThrowWithSql() | ryunosuke\dbml\Database::fetchValue()") の例外送出版 |
[m] fetchOrThrow
public function fetchOrThrow( string $method, $sql, iterable $params = [] )
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 はかなり多彩な指定が可能。下記のメソッドも参照。
- see ryunosuke\dbml\Query\SelectBuilder::column()
- see ryunosuke\dbml\Query\SelectBuilder::where()
- see ryunosuke\dbml\Query\SelectBuilder::orderBy()
- see ryunosuke\dbml\Query\SelectBuilder::limit()
- see ryunosuke\dbml\Query\SelectBuilder::groupBy()
- see ryunosuke\dbml\Query\SelectBuilder::having()
- see ryunosuke\dbml\Database::fetchArray()
- see ryunosuke\dbml\Database::fetchAssoc()
- see ryunosuke\dbml\Database::fetchLists()
- see ryunosuke\dbml\Database::fetchPairs()
- see ryunosuke\dbml\Database::fetchTuple()
- see ryunosuke\dbml\Database::fetchValue()
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()")) |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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 はかなり多彩な指定が可能。下記のメソッドも参照。
- see ryunosuke\dbml\Query\SelectBuilder::cast()
- see ryunosuke\dbml\Query\SelectBuilder::column()
- see ryunosuke\dbml\Query\SelectBuilder::where()
- see ryunosuke\dbml\Query\SelectBuilder::orderBy()
- see ryunosuke\dbml\Query\SelectBuilder::limit()
- see ryunosuke\dbml\Query\SelectBuilder::groupBy()
- see ryunosuke\dbml\Query\SelectBuilder::having()
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()")) |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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');
type | name | summary |
---|---|---|
string|array | $aggregation |
集約関数名 |
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
SelectBuilder | EXISTS クエリビルダ |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
SelectBuilder | NOT EXISTS クエリビルダ |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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) { // 一気に取得ではなく、逐次処理ができる }
type | name | summary |
---|---|---|
| $sql |
|
iterable | $params = [] |
|
type | summary |
---|---|
Yielder | |
[m] yieldArray レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray()") を参照)
レコード群を配列で少しずつ返す(ryunosuke\dbml\Database::yieldArray() を参照)
public function yieldArray( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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);
type | name | summary |
---|---|---|
AbstractGenerator|string | $generator |
|
| $sql |
|
iterable | $params = [] |
|
array | $config = [] |
|
| $file = null |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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' => ['*'], ], ], ]);
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()")) |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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 // )
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()")) |
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'), ]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
type | summary |
---|---|
SelectBuilder | クエリビルダオブジェクト |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
type | summary |
---|---|
SelectBuilder | クエリビルダオブジェクト |
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 // )
type | name | summary |
---|---|---|
array|string | $aggregate |
集約関数名 |
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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 は同じ
type | name | summary |
---|---|---|
string|array | $aggregation |
集約関数名 |
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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)
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
bool | レコードが存在するなら true |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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')]); // → クエリビルダも使える(倍の行を取得できる。あくまで例なので意味はない)
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 = [] |
条件 |
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() と全く同じ。
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 = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
[m] neighbor 特定レコードの前後のレコードを返す
特定レコードの前後のレコードを返す
public function neighbor( array|string $tableDescriptor, array $predicates, int $limit = 1 ): array
ryunosuke\dbml\Query\SelectBuilder::neighbor() へのプロキシメソッド。
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array | $predicates |
|
int | $limit = 1 |
|
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], ], ];
type | name | summary |
---|---|---|
string | $tablename |
対象テーブル名 |
array | $wheres = [] |
対象テーブルの条件 |
array | $other_wheres = [] |
その他の条件 |
bool | $parentive = false |
親方向にたどるか子方向に辿るか |
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'], ];
type | name | summary |
---|---|---|
array | $array |
|
string | $tablename |
|
| $wheres = [] |
|
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 が生えているのでそれを使用する
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() と同じなのでそちらも参照。
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 はキャッシュを返さない
type | name | summary |
---|---|---|
int | $seconds |
|
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
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()")) |
type | summary |
---|---|
Statement | |
[m] executeSelect 取得系クエリを実行する
[m] executeAffect 更新系クエリを実行する
更新系クエリを実行する
public function executeAffect( string $query, iterable|array $params = [], ?int $retry = null ): int|string
type | name | summary |
---|---|---|
string | $query |
|
iterable|array | $params = [] |
|
?int | $retry = null |
|
type | summary |
---|---|
int|string | The number of affected rows. |
type | summary |
---|---|
Exception | |
[m] executeSelectAsync 取得系クエリを非同期で実行する
取得系クエリを非同期で実行する
public function executeSelectAsync( string $query, iterable|array $params = [] ): \Closure
このメソッドはすぐに処理を返し、callable を返す。 その間もクエリは実行されており、callable を実行すると最終結果が得られる。
非常に実験的な機能で現実装は mysqli/pgsql のみの対応。仕様は互換性を考慮せず変更されることがある。
type | name | summary |
---|---|---|
string | $query |
|
iterable|array | $params = [] |
|
type | summary |
---|---|
Closure | |
type | summary |
---|---|
Exception | |
[m] executeAffectAsync 更新系クエリを非同期で実行する
更新系クエリを非同期で実行する
public function executeAffectAsync( string $query, iterable|array $params = [] ): \Closure
このメソッドはすぐに処理を返し、callable を返す。 その間もクエリは実行されており、callable を実行すると最終結果が得られる。
非常に実験的な機能で現実装は mysqli/pgsql のみの対応。仕様は互換性を考慮せず変更されることがある。
type | name | summary |
---|---|---|
string | $query |
|
iterable|array | $params = [] |
|
type | summary |
---|---|
Closure | |
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 のみの対応。
type | name | summary |
---|---|---|
array | $queries |
|
?Connection | $connection = null |
|
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');
type | name | summary |
---|---|---|
string | $tablename |
テーブル名 |
array|Entityable | $default = [] |
レコードのデフォルト値 |
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 が大幅に変化する。
type | name | summary |
---|---|---|
string | $tableName |
|
string | $dml |
|
array|string | $recordsOrFilename |
|
| ...$opt |
|
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 も行われる
type | name | summary |
---|---|---|
array | $datatree |
|
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 を与えないと動作しないのでそれだけは注意。
type | name | summary |
---|---|---|
array|string | $tableName |
テーブル名 or テーブル記法 |
string | $filename |
CSV ファイル名 |
array | $options = [] |
CSV オプション |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
string|SelectBuilder | $sql |
SELECT クエリ |
array | $columns = [] |
カラム定義 |
array|iterable | $params = [] |
bind パラメータ |
| ...$opt |
|
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'))
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
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
返り値として挿入した主キー配列の配列を返す(自動採番テーブルのみ)。 この機能は実験的な機能で、予告なく変更されることがある。
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
のもののみ」などといった「前提となるような条件」を書く。
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $data |
カラムデータ配列あるいは Generator |
array|mixed | $where = [] |
束縛条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $data |
カラムデータ配列あるいは Generator |
array|mixed | $where = [] |
束縛条件 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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')
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $where = [] |
削除条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $where = [] |
削除条件 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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)
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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 ]
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array | $dataarray |
カラムデータ配列あるいは Generator |
array|mixed | $where |
束縛条件。 false を与えると DELETE 文自体を発行しない(速度向上と安全担保) |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
?array | $returning = [] |
返り値の制御変数。配列を与えるとそのカラムの SELECT 結果を返す(null は主キーを表す) |
| ...$opt |
|
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')
type | name | summary |
---|---|---|
string | $tableName |
テーブル名 |
array | $dataarray |
カラムデータ配列あるいは Generator |
| ...$opt |
|
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)))
type | name | summary |
---|---|---|
string|array | $tableName |
テーブル名 |
array | $data |
階層を持ったデータ配列 |
| ...$opt |
|
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'))
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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))
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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))
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'))]);
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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'
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
array | $overrideData = [] |
selectしたデータを上書きするデータ |
array|mixed | $where = [] |
検索条件 |
?string | $sourceTable = null |
元となるテーブル名。省略すると $targetTable と同じになる |
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
type | name | summary |
---|---|---|
string | $tableName |
テーブル名 |
bool | $cascade = false |
CASCADE フラグ。PostgreSql の場合のみ有効 |
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
type | name | summary |
---|---|---|
string | $tableName |
テーブル名 |
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 から始まる連番を返す。
type | name | summary |
---|---|---|
?string | $tableName = null |
|
?string | $columnName = null |
|
type | summary |
---|---|
string|int|null | |
[m] resetAutoIncrement 自動採番列をリセットする
自動採番列をリセットする
public function resetAutoIncrement( string $tableName, ?int $seq = 1 )
$seq に null を与えるとMAX+1になる。
type | name | summary |
---|---|---|
string | $tableName |
|
?int | $seq = 1 |
|
[m] getAffectedRows 最後に更新した行数を返す
最後に更新した行数を返す
public function getAffectedRows(): ?int
実行していない or 直前のクエリが失敗していた場合は null を返す。
type | summary |
---|---|
?int | |
[m] isAffected 1回でも更新操作をしたかを返す
1回でも更新操作をしたかを返す
public function isAffected(): bool
例えば master/slave 構成でこのメソッドが true を返した場合、次のリクエストは masterMode:true にした方が良い。 (レプリケーションの遅延などで slave の古いデータを SELECT してしまう可能性がある)。
type | summary |
---|---|
bool | |
[m] recache キャッシュの破棄と再生成
キャッシュの破棄と再生成
public function recache(bool $force = true): ryunosuke\dbml\Database
デプロイの直後等にこのメソッドを呼べば全キャッシュが生成される。
type | name | summary |
---|---|---|
bool | $force = true |
|
type | summary |
---|---|
Database | |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
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 なんだろう?」)のでエイリアスを用意した。
type | name | summary |
---|---|---|
string|TableDescriptor | $tableName |
テーブル名 |
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
kind | source | summary |
---|---|---|
instead | AffectOrThrowTrait::createWithTable() | insertOrThrow のエイリアス |
[m] getCacheProvider
public function getCacheProvider(): Psr\SimpleCache\CacheInterface
type | summary |
---|---|
CacheInterface | |
[m] getAutoIdentityInsert
public function getAutoIdentityInsert(): bool
type | summary |
---|---|
bool | |
[m] setAutoIdentityInsert
public function setAutoIdentityInsert(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getDefaultChunk
public function getDefaultChunk(): int|string
type | summary |
---|---|
int|string | |
[m] setDefaultChunk
public function setDefaultChunk(mixed $int): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $int |
|
type | summary |
---|---|
Database | |
[m] getDefaultRetry
public function getDefaultRetry(): int
type | summary |
---|---|
int | |
[m] setDefaultRetry
public function setDefaultRetry(mixed $int): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $int |
|
type | summary |
---|---|
Database | |
[m] getAutoCastType
public function getAutoCastType(): array
type | summary |
---|---|
array | |
[m] getMasterMode
public function getMasterMode(): bool
type | summary |
---|---|
bool | |
[m] setMasterMode
public function setMasterMode(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getDynamicPlaceholder
public function getDynamicPlaceholder(): bool
type | summary |
---|---|
bool | |
[m] setDynamicPlaceholder
public function setDynamicPlaceholder(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getCheckSameKey
public function getCheckSameKey(): string
type | summary |
---|---|
string | |
[m] setCheckSameKey
public function setCheckSameKey(mixed $string): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
Database | |
[m] getCheckSameColumn
public function getCheckSameColumn(): string
type | summary |
---|---|
string | |
[m] setCheckSameColumn
public function setCheckSameColumn(mixed $string): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
Database | |
[m] getExportClass
public function getExportClass(): array
type | summary |
---|---|
array | |
[m] setExportClass
public function setExportClass(mixed $array): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $array |
|
type | summary |
---|---|
Database | |
[m] getDefaultIteration ryunosuke\dbml\Gateway\TableGateway::getDefaultIteration()") 参照
ryunosuke\dbml\Gateway\TableGateway::getDefaultIteration() 参照
public function getDefaultIteration(): string
type | summary |
---|---|
string | |
[m] setDefaultIteration ryunosuke\dbml\Gateway\TableGateway::setDefaultIteration()") 参照
ryunosuke\dbml\Gateway\TableGateway::setDefaultIteration() 参照
public function setDefaultIteration(mixed $iterationMode): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $iterationMode |
|
type | summary |
---|---|
Database | |
[m] getDefaultJoinMethod ryunosuke\dbml\Gateway\TableGateway::getDefaultJoinMethod()") 参照
ryunosuke\dbml\Gateway\TableGateway::getDefaultJoinMethod() 参照
public function getDefaultJoinMethod(): string
type | summary |
---|---|
string | |
[m] setDefaultJoinMethod ryunosuke\dbml\Gateway\TableGateway::setDefaultJoinMethod()") 参照
ryunosuke\dbml\Gateway\TableGateway::setDefaultJoinMethod() 参照
public function setDefaultJoinMethod(mixed $string): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
Database | |
[m] getDefaultOrder ryunosuke\dbml\Query\SelectBuilder::getDefaultOrder()") 参照
ryunosuke\dbml\Query\SelectBuilder::getDefaultOrder() 参照
public function getDefaultOrder(): mixed
type | summary |
---|---|
mixed | |
[m] setDefaultOrder ryunosuke\dbml\Query\SelectBuilder::setDefaultOrder()") 参照
ryunosuke\dbml\Query\SelectBuilder::setDefaultOrder() 参照
public function setDefaultOrder(mixed $mixed): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $mixed |
|
type | summary |
---|---|
Database | |
[m] getPrimarySeparator ryunosuke\dbml\Query\SelectBuilder::getPrimarySeparator()") 参照
ryunosuke\dbml\Query\SelectBuilder::getPrimarySeparator() 参照
public function getPrimarySeparator(): string
type | summary |
---|---|
string | |
[m] setPrimarySeparator ryunosuke\dbml\Query\SelectBuilder::setPrimarySeparator()") 参照
ryunosuke\dbml\Query\SelectBuilder::setPrimarySeparator() 参照
public function setPrimarySeparator(mixed $string): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
Database | |
[m] getAggregationDelimiter ryunosuke\dbml\Query\SelectBuilder::getAggregationDelimiter()") 参照
ryunosuke\dbml\Query\SelectBuilder::getAggregationDelimiter() 参照
public function getAggregationDelimiter(): string
type | summary |
---|---|
string | |
[m] setAggregationDelimiter ryunosuke\dbml\Query\SelectBuilder::setAggregationDelimiter()") 参照
ryunosuke\dbml\Query\SelectBuilder::setAggregationDelimiter() 参照
public function setAggregationDelimiter(mixed $string): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
Database | |
[m] getPropagateLockMode ryunosuke\dbml\Query\SelectBuilder::getPropagateLockMode()") 参照
ryunosuke\dbml\Query\SelectBuilder::getPropagateLockMode() 参照
public function getPropagateLockMode(): bool
type | summary |
---|---|
bool | |
[m] setPropagateLockMode ryunosuke\dbml\Query\SelectBuilder::setPropagateLockMode()") 参照
ryunosuke\dbml\Query\SelectBuilder::setPropagateLockMode() 参照
public function setPropagateLockMode(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getInjectChildColumn ryunosuke\dbml\Query\SelectBuilder::getInjectChildColumn()") 参照
ryunosuke\dbml\Query\SelectBuilder::getInjectChildColumn() 参照
public function getInjectChildColumn(): bool
type | summary |
---|---|
bool | |
[m] setInjectChildColumn ryunosuke\dbml\Query\SelectBuilder::setInjectChildColumn()") 参照
ryunosuke\dbml\Query\SelectBuilder::setInjectChildColumn() 参照
public function setInjectChildColumn(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getInsertSet ryunosuke\dbml\Query\AffectBuilder::getInsertSet()") 参照
ryunosuke\dbml\Query\AffectBuilder::getInsertSet() 参照
public function getInsertSet(): bool
type | summary |
---|---|
bool | |
[m] setInsertSet ryunosuke\dbml\Query\AffectBuilder::setInsertSet()") 参照
ryunosuke\dbml\Query\AffectBuilder::setInsertSet() 参照
public function setInsertSet(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getUpdateEmpty ryunosuke\dbml\Query\AffectBuilder::getUpdateEmpty()") 参照
ryunosuke\dbml\Query\AffectBuilder::getUpdateEmpty() 参照
public function getUpdateEmpty(): bool
type | summary |
---|---|
bool | |
[m] setUpdateEmpty ryunosuke\dbml\Query\AffectBuilder::setUpdateEmpty()") 参照
ryunosuke\dbml\Query\AffectBuilder::setUpdateEmpty() 参照
public function setUpdateEmpty(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getDefaultInvalidColumn ryunosuke\dbml\Query\AffectBuilder::getDefaultInvalidColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::getDefaultInvalidColumn() 参照
public function getDefaultInvalidColumn(): array
type | summary |
---|---|
array | |
[m] setDefaultInvalidColumn ryunosuke\dbml\Query\AffectBuilder::setDefaultInvalidColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::setDefaultInvalidColumn() 参照
public function setDefaultInvalidColumn(mixed $array): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $array |
|
type | summary |
---|---|
Database | |
[m] getFilterNoExistsColumn ryunosuke\dbml\Query\AffectBuilder::getFilterNoExistsColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::getFilterNoExistsColumn() 参照
public function getFilterNoExistsColumn(): bool
type | summary |
---|---|
bool | |
[m] setFilterNoExistsColumn ryunosuke\dbml\Query\AffectBuilder::setFilterNoExistsColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::setFilterNoExistsColumn() 参照
public function setFilterNoExistsColumn(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getFilterNullAtNotNullColumn ryunosuke\dbml\Query\AffectBuilder::getFilterNullAtNotNullColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::getFilterNullAtNotNullColumn() 参照
public function getFilterNullAtNotNullColumn(): bool
type | summary |
---|---|
bool | |
[m] setFilterNullAtNotNullColumn ryunosuke\dbml\Query\AffectBuilder::setFilterNullAtNotNullColumn()") 参照
ryunosuke\dbml\Query\AffectBuilder::setFilterNullAtNotNullColumn() 参照
public function setFilterNullAtNotNullColumn(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getConvertEmptyToNull ryunosuke\dbml\Query\AffectBuilder::getConvertEmptyToNull()") 参照
ryunosuke\dbml\Query\AffectBuilder::getConvertEmptyToNull() 参照
public function getConvertEmptyToNull(): bool
type | summary |
---|---|
bool | |
[m] setConvertEmptyToNull ryunosuke\dbml\Query\AffectBuilder::setConvertEmptyToNull()") 参照
ryunosuke\dbml\Query\AffectBuilder::setConvertEmptyToNull() 参照
public function setConvertEmptyToNull(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getConvertBoolToInt ryunosuke\dbml\Query\AffectBuilder::getConvertBoolToInt()") 参照
ryunosuke\dbml\Query\AffectBuilder::getConvertBoolToInt() 参照
public function getConvertBoolToInt(): bool
type | summary |
---|---|
bool | |
[m] setConvertBoolToInt ryunosuke\dbml\Query\AffectBuilder::setConvertBoolToInt()") 参照
ryunosuke\dbml\Query\AffectBuilder::setConvertBoolToInt() 参照
public function setConvertBoolToInt(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getConvertNumericToDatetime ryunosuke\dbml\Query\AffectBuilder::getConvertNumericToDatetime()") 参照
ryunosuke\dbml\Query\AffectBuilder::getConvertNumericToDatetime() 参照
public function getConvertNumericToDatetime(): bool
type | summary |
---|---|
bool | |
[m] setConvertNumericToDatetime ryunosuke\dbml\Query\AffectBuilder::setConvertNumericToDatetime()") 参照
ryunosuke\dbml\Query\AffectBuilder::setConvertNumericToDatetime() 参照
public function setConvertNumericToDatetime(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[m] getTruncateString ryunosuke\dbml\Query\AffectBuilder::getTruncateString()") 参照
ryunosuke\dbml\Query\AffectBuilder::getTruncateString() 参照
public function getTruncateString(): bool
type | summary |
---|---|
bool | |
[m] setTruncateString ryunosuke\dbml\Query\AffectBuilder::setTruncateString()") 参照
ryunosuke\dbml\Query\AffectBuilder::setTruncateString() 参照
public function setTruncateString(mixed $bool): ryunosuke\dbml\Database
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Database | |
[N] ryunosuke\dbml\Attribute\
[C] AbstractAttribute
Hierarchy
type | summary |
---|---|
AbstractAttribute | |
[M] arrayOf
public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
array|ReflectionAttribute[] | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::arrayOf() | |
[M] of
public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
?ReflectionAttribute | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::of() | |
[C] AssumeType
Hierarchy
type | summary |
---|---|
AbstractAttribute | |
AbstractAttribute | |
[m] __construct
public function __construct(string ...$types)
type | name | summary |
---|---|---|
string | ...$types |
|
[m] type
public function type(array $typeMap): string
type | name | summary |
---|---|---|
array | $typeMap |
|
type | summary |
---|---|
string | |
[M] arrayOf
public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
array|ReflectionAttribute[] | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::arrayOf() | |
[M] of
public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
?ReflectionAttribute | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::of() | |
[C] VirtualColumn
Hierarchy
type | summary |
---|---|
AbstractAttribute | |
AbstractAttribute | |
[m] __construct
public function __construct( ?string $type = null, bool $lazy = true, bool $implicit = false )
type | name | summary |
---|---|---|
?string | $type = null |
|
bool | $lazy = true |
|
bool | $implicit = false |
|
[M] arrayOf
public static function arrayOf( $reflector, int $flags = 0 ): array|\ReflectionAttribute[]
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
array|ReflectionAttribute[] | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::arrayOf() | |
[M] of
public static function of( $reflector, int $flags = 0 ): ?ryunosuke\utility\attribute\ReflectionAttribute
type | name | summary |
---|---|---|
| $reflector |
|
int | $flags = 0 |
|
type | summary |
---|---|
?ReflectionAttribute | |
kind | source | summary |
---|---|---|
inherit | AbstractAttribute::of() | |
[N] ryunosuke\dbml\Driver\
[C] ArrayResult
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[m] __construct
public function __construct( array $data, array $metadata )
type | name | summary |
---|---|---|
array | $data |
|
array | $metadata |
|
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
mixed | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | |
kind | source | summary |
---|---|---|
instead | ResultTrait::doctrineType() | |
[m] setSameCheckMethod
public function setSameCheckMethod(string $method)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[C] ConnectionMiddleware
type | summary |
---|---|
Middleware | |
[m] __construct
public function __construct( \Closure $retryer, array $commands )
type | name | summary |
---|---|---|
Closure | $retryer |
|
array | $commands |
|
[m] wrap
public function wrap(Doctrine\DBAL\Driver $driver): Doctrine\DBAL\Driver
type | name | summary |
---|---|---|
Driver | $driver |
|
type | summary |
---|---|
Driver | |
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
type | name | summary |
---|---|---|
string|int | $nativeType |
|
type | summary |
---|---|
?string | |
[m] setSameCheckMethod
public function setSameCheckMethod(string $method)
type | name | summary |
---|---|---|
string | $method |
|
[m] fetchAssociative
public function fetchAssociative(): array|false
type | summary |
---|---|
array|false | |
[m] fetchAllAssociative
public function fetchAllAssociative(): array
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | DoctrineType |
[m] setSameCheckMethod
abstract public function setSameCheckMethod(string $method)
type | name | summary |
---|---|---|
string | $method |
|
[m] getMetadata
abstract public function getMetadata(): array
type | summary |
---|---|
array | |
[N] ryunosuke\dbml\Driver\Mysqli\
[C] Result
Hierarchy
type | summary |
---|---|
Result | |
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $statement
protected \mysqli_stmt $statement
Type: mysqli_stmt
kind | source | summary |
---|---|---|
inherit | Result::$statement | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[M] getMetadataFrom
public static function getMetadataFrom(\mysqli_result $result)
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | |
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
type | name | summary |
---|---|---|
int | $mysqlType |
|
?string | $value |
|
type | summary |
---|---|
string|int|float|bool|null | |
[m] storeResult
public function storeResult()
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | ResultInterface::getMetadata() | |
[m] __construct
public function __construct( \mysqli_stmt $statement, ?Doctrine\DBAL\Driver\Mysqli\Statement $statementReference = null )
type | name | summary |
---|---|---|
mysqli_stmt | $statement |
|
?Statement | $statementReference = null |
|
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
list|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
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
type | summary |
---|---|
mixed|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[N] ryunosuke\dbml\Driver\PDO\
[C] Result
Hierarchy
type | summary |
---|---|
Result | |
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $statement
protected \PDOStatement $statement
Type: PDOStatement
kind | source | summary |
---|---|---|
inherit | Result::$statement | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[M] getMetadataFrom
public static function getMetadataFrom(\PDOStatement $statement)
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
?string | $driverName = null |
|
type | summary |
---|---|
?string | |
kind | source | summary |
---|---|---|
implement | ResultInterface::doctrineType() | NativeType から DoctrineType への変換 |
instead | ResultTrait::doctrineType() | |
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | ResultInterface::getMetadata() | |
[m] __construct
public function __construct(\PDOStatement $statement)
type | name | summary |
---|---|---|
PDOStatement | $statement |
|
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
type | summary |
---|---|
list|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
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
type | summary |
---|---|
mixed|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[N] ryunosuke\dbml\Driver\PgSQL\
[C] Result
Hierarchy
type | summary |
---|---|
Result | |
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $result
protected PgSqlResult|resource|null $result = null
Type: PgSqlResult|resource|null
kind | source | summary |
---|---|---|
inherit | Result::$result | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[M] getMetadataFrom
public static function getMetadataFrom($statement)
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | |
kind | source | summary |
---|---|---|
implement | ResultInterface::doctrineType() | NativeType から DoctrineType への変換 |
instead | ResultTrait::doctrineType() | |
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | ResultInterface::getMetadata() | |
[m] __construct
public function __construct(PgSqlResult|resource $result)
type | name | summary |
---|---|---|
PgSqlResult|resource | $result |
|
kind | source | summary |
---|---|---|
inherit | Result::__construct() | |
[m] __destruct
public function __destruct()
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
type | summary |
---|---|
list|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
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
type | summary |
---|---|
mixed|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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
type | name | summary |
---|---|---|
string | $postgresType |
|
?string | $value |
|
type | summary |
---|---|
string|int|float|bool|null | |
kind | source | summary |
---|---|---|
inherit | Result::mapType() | |
[m] setSameCheckMethod
public function setSameCheckMethod(string $method)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[N] ryunosuke\dbml\Driver\SQLSrv\
[C] Result
Hierarchy
type | summary |
---|---|
Result | |
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $statement
protected resource $statement = null
Type: resource
kind | source | summary |
---|---|---|
inherit | Result::$statement | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[M] getMetadataFrom
public static function getMetadataFrom($statement)
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | |
kind | source | summary |
---|---|---|
implement | ResultInterface::doctrineType() | NativeType から DoctrineType への変換 |
instead | ResultTrait::doctrineType() | |
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | ResultInterface::getMetadata() | |
[m] __construct
public function __construct(resource $stmt)
type | name | summary |
---|---|---|
resource | $stmt |
|
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
type | summary |
---|---|
list|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
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
type | summary |
---|---|
mixed|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[N] ryunosuke\dbml\Driver\SQLite3\
[C] Result
Hierarchy
type | summary |
---|---|
Result | |
type | summary |
---|---|
Result | Driver-level statement execution result. |
ResultInterface | |
type | summary |
---|---|
ResultTrait | |
[p] $result
protected ?\SQLite3Result $result
Type: ?SQLite3Result
kind | source | summary |
---|---|---|
inherit | Result::$result | |
[p] $checkSameMethod
protected null $checkSameMethod = null
Type: null
kind | source | summary |
---|---|---|
instead | ResultTrait::$checkSameMethod | |
[M] getMetadataFrom
public static function getMetadataFrom(\SQLite3Result $result)
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 の網羅が大変すぎるのでかなり気軽に追加する可能性がある。
type | name | summary |
---|---|---|
string|int | $nativeType |
NativeType |
type | summary |
---|---|
?string | |
kind | source | summary |
---|---|---|
implement | ResultInterface::doctrineType() | NativeType から DoctrineType への変換 |
instead | ResultTrait::doctrineType() | |
[m] getMetadata
public function getMetadata(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | ResultInterface::getMetadata() | |
[m] __construct
public function __construct( \SQLite3Result $result, int $changes )
type | name | summary |
---|---|---|
SQLite3Result | $result |
|
int | $changes |
|
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
type | summary |
---|---|
list|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array|false | |
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
type | summary |
---|---|
mixed|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
array | |
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
type | summary |
---|---|
array | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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()
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)
type | name | summary |
---|---|---|
string | $method |
|
kind | source | summary |
---|---|---|
instead | ResultTrait::setSameCheckMethod() | |
[N] ryunosuke\dbml\Entity\
[C] Entity 組み込みのデフォルトエンティティクラス
組み込みのデフォルトエンティティクラス
type | summary |
---|---|
Entityable | エンティティであることを示すインターフェース |
IteratorAggregate | |
JsonSerializable | |
ArrayAccess | |
Traversable | |
[m] __call
public function __call( string $name, array $arguments ): mixed
type | name | summary |
---|---|---|
string | $name |
|
array | $arguments |
|
type | summary |
---|---|
mixed | |
[m] __isset
public function __isset(string $name): bool
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
bool | |
[m] __unset
public function __unset(string $name)
type | name | summary |
---|---|---|
string | $name |
|
[m] __get
public function __get(string $name): mixed
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
mixed | |
[m] __set
public function __set( string $name, mixed $value )
type | name | summary |
---|---|---|
string | $name |
|
mixed | $value |
|
[m] offsetExists
public function offsetExists(mixed $offset): bool
type | name | summary |
---|---|---|
mixed | $offset |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
implement | ArrayAccess::offsetExists() | |
[m] offsetUnset
public function offsetUnset(mixed $offset)
type | name | summary |
---|---|---|
mixed | $offset |
|
kind | source | summary |
---|---|---|
implement | ArrayAccess::offsetUnset() | |
[m] offsetGet
public function offsetGet(mixed $offset): mixed
type | name | summary |
---|---|---|
mixed | $offset |
|
type | summary |
---|---|
mixed | |
kind | source | summary |
---|---|---|
implement | ArrayAccess::offsetGet() | |
[m] offsetSet
public function offsetSet( mixed $offset, mixed $value )
type | name | summary |
---|---|---|
mixed | $offset |
|
mixed | $value |
|
kind | source | summary |
---|---|---|
implement | ArrayAccess::offsetSet() | |
[m] getIterator
public function getIterator(): \Traversable
type | summary |
---|---|
Traversable | |
kind | source | summary |
---|---|---|
implement | IteratorAggregate::getIterator() | |
[m] jsonSerialize
public function jsonSerialize(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | JsonSerializable::jsonSerialize() | |
[m] assign 配列からプロパティをセットする
配列からプロパティをセットする
public function assign(array $fields): ryunosuke\dbml\Entity\Entity
type | name | summary |
---|---|---|
array | $fields |
|
type | summary |
---|---|
Entity | |
kind | source | summary |
---|---|---|
implement | Entityable::assign() | 配列からプロパティをセットする |
[m] arrayize 子要素も含めて再帰的に配列化する
子要素も含めて再帰的に配列化する
public function arrayize(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | Entityable::arrayize() | 子要素も含めて再帰的に配列化する |
[I] Entityable エンティティであることを示すインターフェース
エンティティであることを示すインターフェース
エンティティとして利用するには必ずこのインターフェースを実装しなければならない。
Hierarchy
type | summary |
---|---|
ArrayAccess | |
[m] assign 配列からプロパティをセットする
配列からプロパティをセットする
abstract public function assign(array $fields): ryunosuke\dbml\Entity\Entityable
type | name | summary |
---|---|---|
array | $fields |
|
type | summary |
---|---|
Entityable | |
[m] arrayize 子要素も含めて再帰的に配列化する
子要素も含めて再帰的に配列化する
abstract public function arrayize(): array
type | summary |
---|---|
array | |
[m] offsetExists
abstract public function offsetExists(mixed $offset)
type | name | summary |
---|---|---|
mixed | $offset |
|
kind | source | summary |
---|---|---|
inherit | ArrayAccess::offsetExists() | |
[m] offsetGet
abstract public function offsetGet(mixed $offset)
type | name | summary |
---|---|---|
mixed | $offset |
|
kind | source | summary |
---|---|---|
inherit | ArrayAccess::offsetGet() | |
[m] offsetSet
abstract public function offsetSet( mixed $offset, mixed $value )
type | name | summary |
---|---|---|
mixed | $offset |
|
mixed | $value |
|
kind | source | summary |
---|---|---|
inherit | ArrayAccess::offsetSet() | |
[m] offsetUnset
abstract public function offsetUnset(mixed $offset)
type | name | summary |
---|---|---|
mixed | $offset |
|
kind | source | summary |
---|---|---|
inherit | ArrayAccess::offsetUnset() | |
[N] ryunosuke\dbml\Exception\
[C] NonAffectedException INSER/UPDATE/DELETE 操作で作用行が無かった時の例外クラス
INSER/UPDATE/DELETE 操作で作用行が無かった時の例外クラス
Hierarchy
- \RuntimeException
- Doctrine\DBAL\SQL\Parser\Exception\RegularExpressionError
- ryunosuke\dbml\Exception\InvalidCountException
- PHPUnit\Framework\Exception
- PHPUnit\Framework\AssertionFailedError
- PHPUnit\Framework\InvalidArgumentException
- PHPUnit\Framework\ActualValueIsNotAnObjectException
- PHPUnit\Framework\ComparisonMethodDoesNotAcceptParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareBoolReturnTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareExactlyOneParameterException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotExistException
- SebastianBergmann\Comparator\ComparisonFailure
- PHPUnit\Util\Exception
- PHPUnit\Util\Xml\Exception
- PHPUnit\Framework\MockObject\RuntimeException
type | summary |
---|---|
InvalidCountException | 行数系例外の親例外 |
RuntimeException | |
Exception | |
type | summary |
---|---|
Throwable | |
Stringable | |
[p] $message
protected string $message = ""
Type: string
kind | source | summary |
---|---|---|
inherit | Exception::$message | |
[p] $code
[p] $file
[p] $line
[m] __construct
public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
type | name | summary |
---|---|---|
string | $message = "" |
|
int | $code = 0 |
|
?Throwable | $previous = null |
|
kind | source | summary |
---|---|---|
inherit | Exception::__construct() | |
[m] __wakeup
public function __wakeup()
kind | source | summary |
---|---|---|
inherit | Exception::__wakeup() | |
[m] getMessage
final public function getMessage(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getMessage() | |
[m] getCode
final public function getCode()
kind | source | summary |
---|---|---|
inherit | Exception::getCode() | |
[m] getFile
final public function getFile(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getFile() | |
[m] getLine
final public function getLine(): int
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Exception::getLine() | |
[m] getTrace
final public function getTrace(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | Exception::getTrace() | |
[m] getPrevious
final public function getPrevious(): ?\Throwable
type | summary |
---|---|
?Throwable | |
kind | source | summary |
---|---|---|
inherit | Exception::getPrevious() | |
[m] getTraceAsString
final public function getTraceAsString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getTraceAsString() | |
[m] __toString
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::__toString() | |
[C] InvalidCountException 行数系例外の親例外
行数系例外の親例外
Hierarchy
- \RuntimeException
- Doctrine\DBAL\SQL\Parser\Exception\RegularExpressionError
- ryunosuke\dbml\Exception\InvalidCountException
- PHPUnit\Framework\Exception
- PHPUnit\Framework\AssertionFailedError
- PHPUnit\Framework\InvalidArgumentException
- PHPUnit\Framework\ActualValueIsNotAnObjectException
- PHPUnit\Framework\ComparisonMethodDoesNotAcceptParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareBoolReturnTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareExactlyOneParameterException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotExistException
- SebastianBergmann\Comparator\ComparisonFailure
- PHPUnit\Util\Exception
- PHPUnit\Util\Xml\Exception
- PHPUnit\Framework\MockObject\RuntimeException
type | summary |
---|---|
RuntimeException | |
Exception | |
type | summary |
---|---|
Stringable | |
Throwable | |
[p] $message
protected string $message = ""
Type: string
kind | source | summary |
---|---|---|
inherit | Exception::$message | |
[p] $code
[p] $file
[p] $line
[m] __construct
public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
type | name | summary |
---|---|---|
string | $message = "" |
|
int | $code = 0 |
|
?Throwable | $previous = null |
|
kind | source | summary |
---|---|---|
inherit | Exception::__construct() | |
[m] __wakeup
public function __wakeup()
kind | source | summary |
---|---|---|
inherit | Exception::__wakeup() | |
[m] getMessage
final public function getMessage(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getMessage() | |
[m] getCode
final public function getCode()
kind | source | summary |
---|---|---|
inherit | Exception::getCode() | |
[m] getFile
final public function getFile(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getFile() | |
[m] getLine
final public function getLine(): int
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Exception::getLine() | |
[m] getTrace
final public function getTrace(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | Exception::getTrace() | |
[m] getPrevious
final public function getPrevious(): ?\Throwable
type | summary |
---|---|
?Throwable | |
kind | source | summary |
---|---|---|
inherit | Exception::getPrevious() | |
[m] getTraceAsString
final public function getTraceAsString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getTraceAsString() | |
[m] __toString
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::__toString() | |
[C] NonSelectedException SELECT 操作で取得行が無かった時の例外クラス
SELECT 操作で取得行が無かった時の例外クラス
Hierarchy
- \RuntimeException
- Doctrine\DBAL\SQL\Parser\Exception\RegularExpressionError
- ryunosuke\dbml\Exception\InvalidCountException
- PHPUnit\Framework\Exception
- PHPUnit\Framework\AssertionFailedError
- PHPUnit\Framework\InvalidArgumentException
- PHPUnit\Framework\ActualValueIsNotAnObjectException
- PHPUnit\Framework\ComparisonMethodDoesNotAcceptParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareBoolReturnTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareExactlyOneParameterException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotExistException
- SebastianBergmann\Comparator\ComparisonFailure
- PHPUnit\Util\Exception
- PHPUnit\Util\Xml\Exception
- PHPUnit\Framework\MockObject\RuntimeException
type | summary |
---|---|
InvalidCountException | 行数系例外の親例外 |
RuntimeException | |
Exception | |
type | summary |
---|---|
Throwable | |
Stringable | |
[p] $message
protected string $message = ""
Type: string
kind | source | summary |
---|---|---|
inherit | Exception::$message | |
[p] $code
[p] $file
[p] $line
[m] __construct
public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
type | name | summary |
---|---|---|
string | $message = "" |
|
int | $code = 0 |
|
?Throwable | $previous = null |
|
kind | source | summary |
---|---|---|
inherit | Exception::__construct() | |
[m] __wakeup
public function __wakeup()
kind | source | summary |
---|---|---|
inherit | Exception::__wakeup() | |
[m] getMessage
final public function getMessage(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getMessage() | |
[m] getCode
final public function getCode()
kind | source | summary |
---|---|---|
inherit | Exception::getCode() | |
[m] getFile
final public function getFile(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getFile() | |
[m] getLine
final public function getLine(): int
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Exception::getLine() | |
[m] getTrace
final public function getTrace(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | Exception::getTrace() | |
[m] getPrevious
final public function getPrevious(): ?\Throwable
type | summary |
---|---|
?Throwable | |
kind | source | summary |
---|---|---|
inherit | Exception::getPrevious() | |
[m] getTraceAsString
final public function getTraceAsString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getTraceAsString() | |
[m] __toString
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::__toString() | |
[C] TooManyException SELECT 操作で取得行が多かった時の例外クラス
SELECT 操作で取得行が多かった時の例外クラス
Hierarchy
- \RuntimeException
- Doctrine\DBAL\SQL\Parser\Exception\RegularExpressionError
- ryunosuke\dbml\Exception\InvalidCountException
- PHPUnit\Framework\Exception
- PHPUnit\Framework\AssertionFailedError
- PHPUnit\Framework\InvalidArgumentException
- PHPUnit\Framework\ActualValueIsNotAnObjectException
- PHPUnit\Framework\ComparisonMethodDoesNotAcceptParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareBoolReturnTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareExactlyOneParameterException
- PHPUnit\Framework\ComparisonMethodDoesNotDeclareParameterTypeException
- PHPUnit\Framework\ComparisonMethodDoesNotExistException
- SebastianBergmann\Comparator\ComparisonFailure
- PHPUnit\Util\Exception
- PHPUnit\Util\Xml\Exception
- PHPUnit\Framework\MockObject\RuntimeException
type | summary |
---|---|
InvalidCountException | 行数系例外の親例外 |
RuntimeException | |
Exception | |
type | summary |
---|---|
Throwable | |
Stringable | |
[p] $message
protected string $message = ""
Type: string
kind | source | summary |
---|---|---|
inherit | Exception::$message | |
[p] $code
[p] $file
[p] $line
[m] __construct
public function __construct( string $message = "", int $code = 0, ?\Throwable $previous = null )
type | name | summary |
---|---|---|
string | $message = "" |
|
int | $code = 0 |
|
?Throwable | $previous = null |
|
kind | source | summary |
---|---|---|
inherit | Exception::__construct() | |
[m] __wakeup
public function __wakeup()
kind | source | summary |
---|---|---|
inherit | Exception::__wakeup() | |
[m] getMessage
final public function getMessage(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getMessage() | |
[m] getCode
final public function getCode()
kind | source | summary |
---|---|---|
inherit | Exception::getCode() | |
[m] getFile
final public function getFile(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getFile() | |
[m] getLine
final public function getLine(): int
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Exception::getLine() | |
[m] getTrace
final public function getTrace(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | Exception::getTrace() | |
[m] getPrevious
final public function getPrevious(): ?\Throwable
type | summary |
---|---|
?Throwable | |
kind | source | summary |
---|---|---|
inherit | Exception::getPrevious() | |
[m] getTraceAsString
final public function getTraceAsString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Exception::getTraceAsString() | |
[m] __toString
public function __toString(): string
type | summary |
---|---|
string | |
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 にスコープを当てるときは noscope
や unscope
でデフォルトスコープを外したほうが無難。
あるいは 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() と同じ
type | summary |
---|---|
ArrayAccess | |
IteratorAggregate | |
Countable | |
Stringable | |
Traversable | |
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
type | summary |
---|---|
Database | |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
override | OptionTrait::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, string $table_name, ?string $entity_name = null )
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 マジックコール」も参照。
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
?TableGateway | |
[m] __set update([$name => $value]) のエイリアス
update([$name => $value]) のエイリアス
public function __set( string $name, mixed $value )
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')
のような記法が可能になっている。
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 句 |
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);
type | summary |
---|---|
string | |
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
type | name | summary |
---|---|---|
mixed | $offset |
|
type | summary |
---|---|
bool | |
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);
type | name | summary |
---|---|---|
mixed | $offset |
|
type | summary |
---|---|
mixed|TableGateway | |
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'] = 'タイトル';
type | name | summary |
---|---|---|
mixed | $offset |
|
mixed | $value |
|
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]のレコードを削除する
type | name | summary |
---|---|---|
mixed | $offset |
|
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']); });
type | name | summary |
---|---|---|
bool|Closure | $force = false |
強制フラグ or コールバック |
type | summary |
---|---|
TableGateway | |
[m] describe 自身の Table オブジェクトを返す
自身の Table オブジェクトを返す
public function describe(): Doctrine\DBAL\Schema\Table
type | summary |
---|---|
Table | |
[m] normalize 行を正規化する
行を正規化する
public function normalize(array $row): array
type | name | summary |
---|---|---|
array | $row |
|
type | summary |
---|---|
array | |
[m] invalidColumn 無効カラムを返す
無効カラムを返す
public function invalidColumn(): ?array
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');
type | name | summary |
---|---|---|
?string | $alias |
|
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();
type | name | summary |
---|---|---|
int | $back = 0 |
|
type | summary |
---|---|
TableGateway | |
[m] tableName 実テーブル名を返す
実テーブル名を返す
public function tableName(): string
type | summary |
---|---|
string | |
[m] alias select の際に使用されるエイリアス名を設定・取得する
select の際に使用されるエイリアス名を設定・取得する
public function alias(?string $alias = null): ryunosuke\dbml\Gateway\TableGateway|string|null
引数を与えると setter, 与えないと getter として動作する。 setter の場合は自分自身を返す。
type | name | summary |
---|---|---|
?string | $alias = null |
|
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 の場合は自分自身を返す。
type | name | summary |
---|---|---|
?string|string|null | $foreign = null |
外部キー名 |
type | summary |
---|---|
TableGateway|string|null | 外部キー名 or 自分自身 |
[m] hint インデックスヒントを設定・取得する
インデックスヒントを設定・取得する
public function hint(?string $hint = null): ryunosuke\dbml\Gateway\TableGateway|string|null
引数を与えると setter, 与えないと getter として動作する。 setter の場合は自分自身を返す。
type | name | summary |
---|---|---|
?string | $hint = null |
|
type | summary |
---|---|
TableGateway|string|null | |
[m] modifier エイリアス指定されているならそれを、されていないならテーブル名を返す
エイリアス指定されているならそれを、されていないならテーブル名を返す
public function modifier(): string
// t_tablename echo $gw->modifier(); // T echo $gw->as('T')->modifier();
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)
type | name | summary |
---|---|---|
string | $type |
結合タイプ(AUTO, INNER, ...) |
TableGateway | $gateway |
結合するテーブルゲートウェイ |
string|array | $on = [] |
結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える |
?string | $fkeyname = null |
外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外) |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
string|array | $on = [] |
結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える |
?string | $fkeyname = null |
外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外) |
| $from = null |
|
type | summary |
---|---|
TableGateway | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
kind | source | summary |
---|---|---|
instead | JoinTrait::rightJoinForeignOn() | 結合方法が RIGHT で結合条件・外部キー指定の ryunosuke\dbml\Query\SelectBuilder::join()") |
[m] dryrun dryrun モードに移行する
dryrun モードに移行する
public function dryrun(): ryunosuke\dbml\Gateway\TableGateway
Gateway 版の ryunosuke\dbml\Database::dryrun() 。
type | summary |
---|---|
TableGateway | |
[m] prepare prepare モードに移行する
prepare モードに移行する
public function prepare(): ryunosuke\dbml\Gateway\TableGateway
Gateway 版の ryunosuke\dbml\Database::prepare() 。
type | summary |
---|---|
TableGateway | |
[m] cache cache モードに移行する
cache モードに移行する
public function cache(int $seconds): ryunosuke\dbml\Gateway\TableGateway
Gateway 版の ryunosuke\dbml\Database::cache() 。
type | name | summary |
---|---|---|
int | $seconds |
|
type | summary |
---|---|
TableGateway | |
[m] prepareSelect 取得系クエリをプリペアする
取得系クエリをプリペアする
public function prepareSelect( $tableDescriptor = [], $where = [], $orderBy = [], $limit = [], $groupBy = [], $having = [] ): ryunosuke\dbml\Query\Statement
Gateway 版の ryunosuke\dbml\Database::prepareSelect() 。
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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');
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 = [] |
|
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();
type | name | summary |
---|---|---|
string | $name |
スコープ名 |
string|array | $sourceScopes |
既存スコープ名 |
array|Closure | ...$newscopes |
追加で設定するスコープ(scoping と同じ) |
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');
type | name | summary |
---|---|---|
string | $name |
スコープ名 |
array | $binding |
bind する引数配列 |
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();
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 句 |
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');
type | name | summary |
---|---|---|
| $tableDescriptor |
|
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]);
type | name | summary |
---|---|---|
| $where |
|
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']);
type | name | summary |
---|---|---|
| $orderBy |
|
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]);
type | name | summary |
---|---|---|
| $limit |
|
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');
type | name | summary |
---|---|---|
| ...$groupBy |
|
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]);
type | name | summary |
---|---|---|
| $having |
|
type | summary |
---|---|
TableGateway | |
[m] set SET 句を追加する
SET 句を追加する
public function set(array $sets): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
array | $sets |
|
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', // パラメータなしスコープも同時指定できる ]);
パラメータ有りを含むスコープをスペース区切りで同時に当てた場合は全てのスコープに引数が渡る。 意図しない挙動になり得るのでその場合は配列指定で当てたほうが良い。
type | name | summary |
---|---|---|
string|array | $name = "" |
スコープ名 |
mixed | $variadic_parameters = [] |
スコープパラメータ |
type | summary |
---|---|
TableGateway | |
[m] unscope 名前指定でスコープを外す
名前指定でスコープを外す
public function unscope($name = ""): ryunosuke\dbml\Gateway\TableGateway
スコープは空白区切りで複数指定できる。
# 特に意味はないが、スコープを当てて外すコード $gw->scope('scope1 scope2')->unscope('scope1 scope2');
type | name | summary |
---|---|---|
| $name = "" |
|
type | summary |
---|---|
TableGateway | |
[m] noscope デフォルトスコープを含め、縛っているスコープをすべて解除する
デフォルトスコープを含め、縛っているスコープをすべて解除する
public function noscope(): ryunosuke\dbml\Gateway\TableGateway
type | summary |
---|---|
TableGateway | |
[m] definedScope スコープが定義されているかを返す
スコープが定義されているかを返す
public function definedScope(string|array $name): array|string|null
配列を与えると定義されているスコープだけの配列を返す。 文字列を与えると定義されている時にそのまま返す(未定義は null を返す)。
type | name | summary |
---|---|---|
string|array | $name |
スコープ名 |
type | summary |
---|---|
array|string|null | 自分自身 |
[m] getScopes 定義されているすべてのスコープを返す
定義されているすべてのスコープを返す
public function getScopes(): array
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' => [], ];
type | name | summary |
---|---|---|
string | $name = "" |
|
| $variadic_parameters = [] |
|
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
引数は全て省略できる。省略した場合結果はスコープのもののみとなる。 指定した場合は追加でスコープを指定したように振舞う。
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 句 |
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
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 句 |
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)
type | name | summary |
---|---|---|
mixed | ...$variadic |
主キー値 |
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'
type | name | summary |
---|---|---|
mixed | ...$variadic |
一意キー値 |
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
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()")) |
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[]
type | name | summary |
---|---|---|
mixed | $tableDescriptor = [] |
|
mixed | $where = [] |
|
mixed | $orderBy = [] |
|
mixed | $limit = [] |
|
mixed | $groupBy = [] |
|
mixed | $having = [] |
|
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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)
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
[m] find 主キー指定でレコードを取得する
主キー指定でレコードを取得する
public function find( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
string|array | $aggregation |
集約関数名 |
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
SelectBuilder | EXISTS クエリビルダ |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
SelectBuilder | NOT EXISTS クエリビルダ |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
type | summary |
---|---|
SelectBuilder | |
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
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()")) |
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'), ]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
type | summary |
---|---|
SelectBuilder | クエリビルダオブジェクト |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
type | summary |
---|---|
SelectBuilder | クエリビルダオブジェクト |
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
type | name | summary |
---|---|---|
array|string | $aggregate |
集約関数名 |
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
string|array | $aggregation |
集約関数名 |
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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)
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
type | summary |
---|---|
bool | レコードが存在するなら true |
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種類の方法が存在する。
count($gw);
$gw->count('*');
1 は php 標準の count() 関数フックであり、レコードをフェッチしてその件数を返す。 2 は メソッドコールであり、COUNT クエリを発行する。 当たっている WHERE が同じであれば結果も同じになるが、その内部処理は大きく異なる。
内部的にメソッド呼び出しと count 呼び出しを判断する術がないので引数で分岐している。
type | name | summary |
---|---|---|
string|array | $column = [] |
SELECT 句 |
string|array | $where = [] |
WHERE 句 |
string|array | $groupBy = [] |
GROUP BY 句 |
string|array | $having = [] |
HAVING 句 |
type | summary |
---|---|
int | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array | $predicates |
|
int | $limit = 1 |
|
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() も同時に行う。
type | name | summary |
---|---|---|
?int|int | $currentpage |
|
?int|int | $countperpage |
|
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() も同時に行う。
type | name | summary |
---|---|---|
?array|array | $condition |
|
?int|int | $count |
|
?bool|bool | $orderbyasc = true |
|
type | summary |
---|---|
Sequencer | |
[m] chunk 分割して sequence してレコードジェネレータを返す
分割して sequence してレコードジェネレータを返す
public function chunk( int $count, ?string $column = null, $fixrange = false ): \Generator
Gateway 版の ryunosuke\dbml\Query\SelectBuilder::chunk() 。
type | name | summary |
---|---|---|
int | $count |
|
?string | $column = null |
|
| $fixrange = false |
|
type | summary |
---|---|
Generator | |
[m] getEmptyRecord 空レコードを返す
空レコードを返す
public function getEmptyRecord(array|ryunosuke\dbml\Entity\Entityable $default = []): array|ryunosuke\dbml\Entity\Entityable
Gateway 版の ryunosuke\dbml\Database::getEmptyRecord() 。
type | name | summary |
---|---|---|
array|Entityable | $default = [] |
レコードのデフォルト値 |
type | summary |
---|---|
array|Entityable | 空レコード |
[m] gather レコード情報をかき集める
レコード情報をかき集める
public function gather( array $wheres = [], array $other_wheres = [], bool $parentive = false ): array
Gateway 版の ryunosuke\dbml\Database::gather() 。
type | name | summary |
---|---|---|
array | $wheres = [] |
対象テーブルの条件 |
array | $other_wheres = [] |
その他の条件 |
bool | $parentive = false |
親方向にたどるか子方向に辿るか |
type | summary |
---|---|
array | |
[m] differ レコード配列の差分をとる
レコード配列の差分をとる
public function differ( array $array, $wheres = [] ): array
Gateway 版の ryunosuke\dbml\Database::differ() 。
type | name | summary |
---|---|---|
array | $array |
|
| $wheres = [] |
|
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
type | name | summary |
---|---|---|
string|SelectBuilder | $sql |
SELECT クエリ |
array | $columns = [] |
カラム定義 |
iterable|array | $params = [] |
bind パラメータ |
| ...$opt |
|
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
type | name | summary |
---|---|---|
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
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
type | name | summary |
---|---|---|
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
array|Generator | $data |
カラムデータ配列あるいは Generator |
array|mixed | $where = [] |
束縛条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
array|Generator | $data |
カラムデータ配列あるいは Generator |
array|mixed | $where = [] |
束縛条件 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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
type | name | summary |
---|---|---|
array|Generator | $where = [] |
削除条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
array|Generator | $where = [] |
削除条件 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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
type | name | summary |
---|---|---|
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
int|array[]|Entity[]|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
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
type | name | summary |
---|---|---|
array | $dataarray |
カラムデータ配列あるいは Generator |
array|mixed | $where |
束縛条件。 false を与えると DELETE 文自体を発行しない(速度向上と安全担保) |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
?array | $returning = [] |
返り値の制御変数。配列を与えるとそのカラムの SELECT 結果を返す(null は主キーを表す) |
| ...$opt |
|
type | summary |
---|---|
array | 基本的には主キー配列. dryrun 中は SQL をネストして返す |
[m] affectArray 駆動表を省略できる ryunosuke\dbml\Database::affectArray()")
駆動表を省略できる ryunosuke\dbml\Database::affectArray()
public function affectArray( array $dataarray, ...$opt ): array
type | name | summary |
---|---|---|
array | $dataarray |
カラムデータ配列あるいは Generator |
| ...$opt |
|
type | summary |
---|---|
array | 基本的には主キー配列. dryrun 中は SQL をネストして返す |
[m] save 駆動表を省略できる ryunosuke\dbml\Database::save()")
駆動表を省略できる ryunosuke\dbml\Database::save()
public function save( array $data, ...$opt ): array|string[]
type | name | summary |
---|---|---|
array | $data |
階層を持ったデータ配列 |
| ...$opt |
|
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
type | name | summary |
---|---|---|
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
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
type | name | summary |
---|---|---|
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[m] deleteOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::delete()")
作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::delete()
public function deleteOrThrow( array|mixed $where = [], ...$opt ): array|string
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where |
WHERE 条件 |
?array | $invalid_columns = null |
無効カラム値 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
UPDATE データ配列 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[m] removeOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::remove()")
作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::remove()
public function removeOrThrow( array|mixed $where = [], ...$opt ): array|string
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[m] destroyOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::destroy()")
作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::destroy()
public function destroyOrThrow( array|mixed $where = [], ...$opt ): array|string
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
?int | $limit = null |
残す件数 |
string|array | $orderBy = [] |
並び順 |
string|array | $groupBy = [] |
グルーピング条件 |
array|mixed | $where = [] |
WHERE 条件 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
[m] upsertOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upsert()")
作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::upsert()
public function upsertOrThrow( mixed $insertData, mixed $updateData = [], ...$opt ): array|string
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
[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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $insertData |
INSERT データ配列 |
mixed | $updateData = [] |
UPDATE データ配列 |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
[m] replaceOrThrow 作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::replace()")
作用行が 0 のときに例外を投げる ryunosuke\dbml\Gateway\TableGateway::replace()
public function replaceOrThrow( mixed $data, ...$opt ): array|string
type | name | summary |
---|---|---|
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
type | summary |
---|---|
NonAffectedException | |
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
type | name | summary |
---|---|---|
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
type | name | summary |
---|---|---|
mixed | $data |
REPLACE データ配列 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
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
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
type | summary |
---|---|
int|string[]|Statement | 基本的には affected row. dryrun 中は文字列配列、preparing 中は Statement |
[m] getLastInsertId 最後に挿入した ID を返す
最後に挿入した ID を返す
public function getLastInsertId(?string $columnname = null): string|int|null
Gateway 版の ryunosuke\dbml\Database::getLastInsertId() 。
type | name | summary |
---|---|---|
?string | $columnname = null |
|
type | summary |
---|---|
string|int|null | |
[m] resetAutoIncrement 自動採番列をリセットする
自動採番列をリセットする
public function resetAutoIncrement(?int $seq = 1)
Gateway 版の ryunosuke\dbml\Database::resetAutoIncrement() 。
type | name | summary |
---|---|---|
?int | $seq = 1 |
|
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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 = [] )
type | name | summary |
---|---|---|
| $config = [] |
|
| $tableDescriptor = [] |
|
| $where = [] |
|
| $orderBy = [] |
|
| $limit = [] |
|
| $groupBy = [] |
|
| $having = [] |
|
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
type | summary |
---|---|
string|int|array | 集約結果 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
mixed | $data |
INSERT データ配列 |
| ...$opt |
|
type | summary |
---|---|
int|array|string[]|Statement | 基本的には affected row. 引数次第では主キー配列. dryrun 中は文字列配列、preparing 中は Statement |
kind | source | summary |
---|---|---|
instead | AffectOrThrowTrait::createWithoutTable() | insertOrThrow のエイリアス |
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
type | name | summary |
---|---|---|
array|Generator | $data |
カラムデータ配列あるいは Generator |
| ...$opt |
|
type | summary |
---|---|
array|string | |
kind | source | summary |
---|---|---|
instead | AffectAndPrimaryTrait::insertArrayAndPrimaryWithoutTable() | 主キーを返す ryunosuke\dbml\Gateway\TableGateway::insertArray()") |
[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
type | name | summary |
---|---|---|
array|Generator | $insertData |
カラムデータ配列あるいは Generator |
array | $updateData = [] |
カラムデータ |
string | $uniquekey = "PRIMARY" |
重複チェックに使うユニークキー名 |
| ...$opt |
|
type | summary |
---|---|
array|string | |
kind | source | summary |
---|---|---|
instead | AffectAndPrimaryTrait::modifyArrayAndPrimaryWithoutTable() | 主キーを返す ryunosuke\dbml\Gateway\TableGateway::modifyArray()") |
[m] getImmutable
public function getImmutable(): bool
type | summary |
---|---|
bool | |
[m] setImmutable
public function setImmutable(mixed $immutableMode): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
mixed | $immutableMode |
|
type | summary |
---|---|
TableGateway | |
[m] getDefaultIteration
public function getDefaultIteration(): string
type | summary |
---|---|
string | |
[m] setDefaultIteration
public function setDefaultIteration(mixed $iterationMode): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
mixed | $iterationMode |
|
type | summary |
---|---|
TableGateway | |
[m] getDefaultJoinMethod
public function getDefaultJoinMethod(): string
type | summary |
---|---|
string | |
[m] setDefaultJoinMethod
public function setDefaultJoinMethod(mixed $string): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
TableGateway | |
[m] getIgnoreAffectScope
public function getIgnoreAffectScope(): array
type | summary |
---|---|
array | |
[m] setIgnoreAffectScope
public function setIgnoreAffectScope(array $ignoreAffectScope): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
array | $ignoreAffectScope |
|
type | summary |
---|---|
TableGateway | |
[m] getScopeRenamer
public function getScopeRenamer(): \Closure
type | summary |
---|---|
Closure | |
[m] setScopeRenamer
public function setScopeRenamer(\Closure $scopeRenamer): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
Closure | $scopeRenamer |
|
type | summary |
---|---|
TableGateway | |
[m] getColumnRenamer
public function getColumnRenamer(): \Closure
type | summary |
---|---|
Closure | |
[m] setColumnRenamer これは phpstorm の as keyword が修正されたら不要になる
これは phpstorm の as keyword が修正されたら不要になる
public function setColumnRenamer(\Closure $columnRenamer): ryunosuke\dbml\Gateway\TableGateway
type | name | summary |
---|---|---|
Closure | $columnRenamer |
|
type | summary |
---|---|
TableGateway | |
[N] ryunosuke\dbml\Generator\
[C] Yielder 少しずつ fetch する Generator のようなクラス
少しずつ fetch する Generator のようなクラス
type | summary |
---|---|
IteratorAggregate | |
Traversable | |
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 )
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
type | name | summary |
---|---|---|
string | $method |
|
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 系クエリが使えないことを意味するので、本当に必要な時以外は呼ばなくていい。
type | name | summary |
---|---|---|
bool | $mode |
|
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 にすると挙動が分かりやすい。
type | name | summary |
---|---|---|
bool | $mode |
|
type | summary |
---|---|
Yielder | |
[m] getIterator
public function getIterator(): \Traversable
type | summary |
---|---|
Traversable | |
kind | source | summary |
---|---|---|
implement | IteratorAggregate::getIterator() | |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
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 = [])
type | name | summary |
---|---|---|
array | $config = [] |
|
[m] generate 出力場所とデータプロバイダを与えて出力する
出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
type | name | summary |
---|---|---|
string|resource | $location |
出力場所。null を与えると標準出力、文字列を与えるとファイルになる |
iterable | $provider |
行を1行ずつ返す行プロバイダ |
type | summary |
---|---|
int | 書き込みバイト数 |
[m] initProvider プロバイダの初期設定を行う
プロバイダの初期設定を行う
abstract protected function initProvider(iterable $provider)
type | name | summary |
---|---|---|
iterable | $provider |
行を1行ずつ返す行プロバイダ |
[m] generateHead head を出力する
head を出力する
abstract protected function generateHead(resource $resource)
例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。
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 なら "" のようなデータ本体を出力する。
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 なら ]} などの閉じブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
[C] ArrayGenerator 行ごとに php 配列化する出力クラス
行ごとに php 配列化する出力クラス
Hierarchy
type | summary |
---|---|
AbstractGenerator | 行ごとに何らかの変換を通して返す抽象クラス |
[C] BOM
protected const string BOM = ""
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::BOM | |
[p] $config
protected array $config
Type: array
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::$config | |
[m] __construct
public function __construct(array $config = [])
type | name | summary |
---|---|---|
array | $config = [] |
|
kind | source | summary |
---|---|---|
override | AbstractGenerator::__construct() | |
[m] initProvider プロバイダの初期設定を行う
プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
type | name | summary |
---|---|---|
iterable | $provider |
行を1行ずつ返す行プロバイダ |
kind | source | summary |
---|---|---|
override | AbstractGenerator::initProvider() | プロバイダの初期設定を行う |
[m] generateHead head を出力する
head を出力する
protected function generateHead(resource $resource)
例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
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 なら "" のようなデータ本体を出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
int|string | $key |
行のキー |
array | $value |
行 |
bool | $first_flg |
初回ループ(最初の出力)なら true |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateBody() | body を出力する |
[m] generateTail tail を出力する
tail を出力する
protected function generateTail(resource $resource)
json なら ]} などの閉じブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateTail() | tail を出力する |
[m] generate 出力場所とデータプロバイダを与えて出力する
出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
type | name | summary |
---|---|---|
string|resource | $location |
出力場所。null を与えると標準出力、文字列を与えるとファイルになる |
iterable | $provider |
行を1行ずつ返す行プロバイダ |
type | summary |
---|---|
int | 書き込みバイト数 |
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::generate() | 出力場所とデータプロバイダを与えて出力する |
[C] CsvGenerator 行ごとに CSV 化する出力クラス
行ごとに CSV 化する出力クラス
Hierarchy
type | summary |
---|---|
AbstractGenerator | 行ごとに何らかの変換を通して返す抽象クラス |
[C] BOM
protected const string BOM = ""
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::BOM | |
[p] $config
protected array $config
Type: array
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::$config | |
[m] __construct
public function __construct(array $config = [])
type | name | summary |
---|---|---|
array | $config = [] |
|
kind | source | summary |
---|---|---|
override | AbstractGenerator::__construct() | |
[m] initProvider プロバイダの初期設定を行う
プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
type | name | summary |
---|---|---|
iterable | $provider |
行を1行ずつ返す行プロバイダ |
kind | source | summary |
---|---|---|
override | AbstractGenerator::initProvider() | プロバイダの初期設定を行う |
[m] generateHead head を出力する
head を出力する
protected function generateHead(resource $resource)
例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
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 なら "" のようなデータ本体を出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
int|string | $key |
行のキー |
array | $value |
行 |
bool | $first_flg |
初回ループ(最初の出力)なら true |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateBody() | body を出力する |
[m] generateTail tail を出力する
tail を出力する
protected function generateTail(resource $resource)
json なら ]} などの閉じブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateTail() | tail を出力する |
[m] generate 出力場所とデータプロバイダを与えて出力する
出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
type | name | summary |
---|---|---|
string|resource | $location |
出力場所。null を与えると標準出力、文字列を与えるとファイルになる |
iterable | $provider |
行を1行ずつ返す行プロバイダ |
type | summary |
---|---|
int | 書き込みバイト数 |
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::generate() | 出力場所とデータプロバイダを与えて出力する |
[C] JsonGenerator 行ごとに JSON 化する出力クラス
行ごとに JSON 化する出力クラス
Hierarchy
type | summary |
---|---|
AbstractGenerator | 行ごとに何らかの変換を通して返す抽象クラス |
[C] BOM
protected const string BOM = ""
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::BOM | |
[p] $config
protected array $config
Type: array
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::$config | |
[m] __construct
public function __construct(array $config = [])
type | name | summary |
---|---|---|
array | $config = [] |
|
kind | source | summary |
---|---|---|
override | AbstractGenerator::__construct() | |
[m] initProvider プロバイダの初期設定を行う
プロバイダの初期設定を行う
protected function initProvider(iterable $provider)
type | name | summary |
---|---|---|
iterable | $provider |
行を1行ずつ返す行プロバイダ |
kind | source | summary |
---|---|---|
override | AbstractGenerator::initProvider() | プロバイダの初期設定を行う |
[m] generateHead head を出力する
head を出力する
protected function generateHead(resource $resource)
例えば csv ならヘッダ行、 json なら [{ などの開きブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
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 なら "" のようなデータ本体を出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
int|string | $key |
行のキー |
array | $value |
行 |
bool | $first_flg |
初回ループ(最初の出力)なら true |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateBody() | body を出力する |
[m] generateTail tail を出力する
tail を出力する
protected function generateTail(resource $resource)
json なら ]} などの閉じブレースを出力する。
type | name | summary |
---|---|---|
resource | $resource |
書き込み先リソース |
kind | source | summary |
---|---|---|
override | AbstractGenerator::generateTail() | tail を出力する |
[m] generate 出力場所とデータプロバイダを与えて出力する
出力場所とデータプロバイダを与えて出力する
final public function generate( string|resource $location, iterable $provider ): int
type | name | summary |
---|---|---|
string|resource | $location |
出力場所。null を与えると標準出力、文字列を与えるとファイルになる |
iterable | $provider |
行を1行ずつ返す行プロバイダ |
type | summary |
---|---|
int | 書き込みバイト数 |
kind | source | summary |
---|---|---|
inherit | AbstractGenerator::generate() | 出力場所とデータプロバイダを与えて出力する |
[N] ryunosuke\dbml\Logging\
[C] LoggerChain ログラッパー
ログラッパー
配下にある PSR-3 に委譲するだけで自身は何もしない。
Hierarchy
type | summary |
---|---|
AbstractLogger | This is a simple Logger implementation that other Loggers can inherit from. |
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 = [] )
type | name | summary |
---|---|---|
mixed | $level |
|
Stringable|string | $message |
|
array|mixed[] | $context = [] |
|
type | summary |
---|---|
InvalidArgumentException | |
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)
type | name | summary |
---|---|---|
LoggerInterface | $logger |
|
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[]
type | name | summary |
---|---|---|
LoggerInterface | $logger |
追加するロガー |
?string | $name = null |
ロガーの名前 |
type | summary |
---|---|
LoggerInterface[] | |
[m] resetLoggers 内部ロガーをセットして設定されていたものを返す
内部ロガーをセットして設定されていたものを返す
public function resetLoggers(array|Psr\Log\LoggerInterface[] $loggers): array|Psr\Log\LoggerInterface[]
type | name | summary |
---|---|---|
array|LoggerInterface[] | $loggers |
追加するロガー |
type | summary |
---|---|
array|LoggerInterface[] | |
[m] emergency System is unusable.
System is unusable.
public function emergency( \Stringable|string $message, array $context = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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 = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
kind | source | summary |
---|---|---|
inherit | AbstractLogger::info() | Interesting events. |
[m] debug Detailed debug information.
Detailed debug information.
public function debug( \Stringable|string $message, array $context = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
kind | source | summary |
---|---|---|
inherit | AbstractLogger::debug() | Detailed debug information. |
[C] Middleware
type | summary |
---|---|
Middleware | |
[m] __construct
public function __construct(Psr\Log\LoggerInterface $logger)
type | name | summary |
---|---|---|
LoggerInterface | $logger |
|
[m] wrap
public function wrap(Doctrine\DBAL\Driver $driver): Doctrine\DBAL\Driver
type | name | summary |
---|---|---|
Driver | $driver |
|
type | summary |
---|---|
Driver | |
kind | source | summary |
---|---|---|
implement | Middleware::wrap() | |
[m] getLogger
public function getLogger(): Psr\Log\LoggerInterface
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
type | summary |
---|---|
AbstractLogger | This is a simple Logger implementation that other Loggers can inherit from. |
type | summary |
---|---|
LoggerInterface | Describes a logger instance. |
type | summary |
---|---|
DebugInfoTrait | |
OptionTrait | オプションを保持し、get/set できるようにする trait |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
override | OptionTrait::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[M] simple シンプルに値の埋め込みだけを行うコールバックを返す
シンプルに値の埋め込みだけを行うコールバックを返す
public static function simple(?int $trimsize = null): \Closure
type | name | summary |
---|---|---|
?int | $trimsize = null |
|
type | summary |
---|---|
Closure | |
[M] pretty 値を埋め込んだ上で sql フォーマットするコールバックを返す
値を埋め込んだ上で sql フォーマットするコールバックを返す
public static function pretty(?int $trimsize = null): \Closure
type | name | summary |
---|---|---|
?int | $trimsize = null |
|
type | summary |
---|---|
Closure | |
[M] oneline 連続する空白をまとめて1行化するコールバックを返す
連続する空白をまとめて1行化するコールバックを返す
public static function oneline(?int $trimsize = null): \Closure
type | name | summary |
---|---|---|
?int | $trimsize = null |
|
type | summary |
---|---|
Closure | |
[M] json 1行 json (jsonl) のコールバックを返す
1行 json (jsonl) のコールバックを返す
public static function json(bool $bind = true): \Closure
type | name | summary |
---|---|---|
bool | $bind = true |
|
type | summary |
---|---|
Closure | |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( mixed $destination = null, array $options = [] )
type | name | summary |
---|---|---|
mixed | $destination = null |
出力場所だけはほぼ必須かつ単一で与えることも多いため別引数で与えられる |
array | $options = [] |
オプション |
[m] __destruct デストラクタのデフォルト実装
デストラクタのデフォルト実装
public function __destruct()
デストラクタはコンストラクタに比べてそれほど実装されないので trait 側で定義してしまって良いと判断。 use 側でデストラクタを定義したい場合は OptionTrait__destruct を呼ぶようにすること。
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 = [] )
type | name | summary |
---|---|---|
mixed | $level |
|
Stringable|string | $message |
|
array|mixed[] | $context = [] |
|
type | summary |
---|---|
InvalidArgumentException | |
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 = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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 = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
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.
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
kind | source | summary |
---|---|---|
inherit | AbstractLogger::info() | Interesting events. |
[m] debug Detailed debug information.
Detailed debug information.
public function debug( \Stringable|string $message, array $context = [] )
type | name | summary |
---|---|---|
Stringable|string | $message |
|
array | $context = [] |
|
kind | source | summary |
---|---|---|
inherit | AbstractLogger::debug() | Detailed debug information. |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
instead | OptionTrait::checkUnknownOption() | |
[C] Connection
Hierarchy
type | summary |
---|---|
AbstractConnectionMiddleware | |
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 )
type | name | summary |
---|---|---|
Connection | $connection |
|
LoggerInterface | $logger |
|
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
type | name | summary |
---|---|---|
string | $sql |
|
| $params = [] |
|
| $types = [] |
|
type | summary |
---|---|
Statement | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
string | $sql |
|
type | summary |
---|---|
Result | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
string | $sql |
|
type | summary |
---|---|
int | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
bool | TRUE on success or FALSE on failure. |
type | summary |
---|---|
Exception | |
kind | source | summary |
---|---|---|
implement | Connection::beginTransaction() | Initiates a transaction. |
[m] commit Commits a transaction.
Commits a transaction.
public function commit(): bool
type | summary |
---|---|
bool | TRUE on success or FALSE on failure. |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
bool | TRUE on success or FALSE on failure. |
type | summary |
---|---|
Exception | |
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.
type | name | summary |
---|---|---|
mixed | $value |
|
int | $type = Doctrine\DBAL\ParameterType::STRING |
|
type | summary |
---|---|
mixed | |
kind | source | summary |
---|---|---|
inherit | AbstractConnectionMiddleware::quote() | <tag_inheritdoc data-type='' data-description=''>Quotes a string for use in a query. |
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
type | name | summary |
---|---|---|
string|null | $name = null |
|
type | summary |
---|---|
string|int|false | |
type | summary |
---|---|
Exception | |
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
type | summary |
---|---|
string | |
type | summary |
---|---|
Exception | |
kind | source | summary |
---|---|---|
inherit | AbstractConnectionMiddleware::getServerVersion() | Returns information about the version of the database server connected to. |
[m] getNativeConnection
public function getNativeConnection(): resource|object
type | summary |
---|---|
resource|object | |
kind | source | summary |
---|---|---|
inherit | AbstractConnectionMiddleware::getNativeConnection() | |
[C] Driver
Hierarchy
type | summary |
---|---|
AbstractDriverMiddleware | |
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 )
type | name | summary |
---|---|---|
Driver | $driver |
|
LoggerInterface | $logger |
|
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
type | name | summary |
---|---|---|
array | $params |
|
type | summary |
---|---|
Connection | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
AbstractPlatform | The database platform. |
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.
type | name | summary |
---|---|---|
Connection | $conn |
|
AbstractPlatform | $platform |
|
type | summary |
---|---|
AbstractSchemaManager | |
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
type | summary |
---|---|
ExceptionConverter | |
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
type | name | summary |
---|---|---|
string | $version |
The platform/server version string to evaluate. This should be given in the notation |
type | summary |
---|---|
AbstractPlatform | |
type | summary |
---|---|
Exception | If the given version string could not be evaluated. |
kind | source | summary |
---|---|---|
inherit | AbstractDriverMiddleware::createDatabasePlatformForVersion() | Factory method for creating the appropriate platform instance for the given version. |
[C] Statement
Hierarchy
type | summary |
---|---|
AbstractStatementMiddleware | |
type | summary |
---|---|
Statement | Driver-level statement |
[m] __construct
public function __construct( Doctrine\DBAL\Driver\Statement $statement, Psr\Log\LoggerInterface $logger, string $sql )
type | name | summary |
---|---|---|
Statement | $statement |
|
LoggerInterface | $logger |
|
string | $sql |
|
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.
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 |
type | summary |
---|---|
bool | TRUE on success or FALSE on failure. |
type | summary |
---|---|
Exception | |
kind | source | summary |
---|---|---|
implement | Statement::bindValue() | Binds a value to a corresponding named (not supported by mysqli driver, see comment below) or positional |
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.
type | name | summary |
---|---|---|
mixed[]|null | $params = null |
A numeric array of values with as many elements as there are |
type | summary |
---|---|
Result | |
type | summary |
---|---|
Exception | |
kind | source | summary |
---|---|---|
implement | Statement::execute() | Executes a prepared statement |
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.
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 |
type | summary |
---|---|
bool | TRUE on success or FALSE on failure. |
type | summary |
---|---|
Exception | |
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 |
type | summary |
---|---|
AbstractStatementMiddleware::bindValue() | |
Statement::bindValue() | |
Statement::bindValue() | |
ParameterType | |
[N] ryunosuke\dbml\Metadata\
[C] CompatibleConnection RDBMS 特有の処理を記述するクラス
RDBMS 特有の処理を記述するクラス
ライブラリ内部で $native instanceof したくないのでそういうのはこのクラスが吸収する。 あと sqlite だけでできるだけカバレッジを埋めたい裏事情もある。
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)
type | name | summary |
---|---|---|
Connection | $connection |
|
[m] getConnection
public function getConnection(): Doctrine\DBAL\Connection
type | summary |
---|---|
Connection | |
[m] getName
public function getName(): string
type | summary |
---|---|
string | |
[m] isSupportedNamedPlaceholder
public function isSupportedNamedPlaceholder(): bool
type | summary |
---|---|
bool | |
[m] isEmulationMode
public function isEmulationMode(): bool
type | summary |
---|---|
bool | |
[m] isTransactionActive
public function isTransactionActive(): ?bool
type | summary |
---|---|
?bool | |
[m] getSupportedMetadata
public function getSupportedMetadata(): array
type | summary |
---|---|
array | |
[m] tryPDOAttribute
public function tryPDOAttribute( $attribute_name, $attribute_value )
type | name | summary |
---|---|---|
| $attribute_name |
|
| $attribute_value |
|
[m] setBufferMode
public function setBufferMode(bool $mode)
type | name | summary |
---|---|---|
bool | $mode |
|
[m] customResult
[m] getMetadata
public function getMetadata(Doctrine\DBAL\Result $result): array
type | name | summary |
---|---|---|
Result | $result |
|
type | summary |
---|---|
array | |
[m] alternateMatchedRows
public function alternateMatchedRows(): ?int
type | summary |
---|---|
?int | |
[m] executeAsync
public function executeAsync( $sqls, $converter, $affected )
type | name | summary |
---|---|---|
| $sqls |
|
| $converter |
|
| $affected |
|
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
kind | source | summary |
---|---|---|
instead | FactoryTrait::new() | |
[C] CompatiblePlatform 各 Platform では賄いきれない RDBMS の差異を吸収するクラス
各 Platform では賄いきれない RDBMS の差異を吸収するクラス
ライブラリ内部で $platform instanceof したくないのでそういうのはこのクラスが吸収する。 あと sqlite だけでできるだけカバレッジを埋めたい裏事情もある。 (コイツのテストは接続を必要としないのであらゆる環境でカバーできるため)。
本当は AbstractPlatform を継承したいんだけどそれだと本家の変更を自動追従できないのでコンポジットパターンになっている。
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 )
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
?string | $version = null |
|
[m] getWrappedPlatform 元 platform を取得する
元 platform を取得する
public function getWrappedPlatform(): Doctrine\DBAL\Platforms\AbstractPlatform
type | summary |
---|---|
AbstractPlatform | |
[m] getVersion バージョン文字列を取得する
バージョン文字列を取得する
public function getVersion(): ?string
type | summary |
---|---|
?string | |
[m] getName platform 名を取得する
platform 名を取得する
public function getName(): string
type | summary |
---|---|
string | |
[m] supportsIdentityNullable AUTO_INCREMENT な列に null を与えると自動採番が働くかどうか
AUTO_INCREMENT な列に null を与えると自動採番が働くかどうか
public function supportsIdentityNullable(): bool
type | summary |
---|---|
bool | |
[m] supportsIdentityUpdate AUTO_INCREMENT な列を明示指定して UPDATE できるか否かを返す
AUTO_INCREMENT な列を明示指定して UPDATE できるか否かを返す
public function supportsIdentityUpdate(): bool
type | summary |
---|---|
bool | |
[m] supportsIdentityAutoUpdate AUTO_INCREMENT な列を明示指定したあと、自動でシーケンスが更新されるか否かを返す
AUTO_INCREMENT な列を明示指定したあと、自動でシーケンスが更新されるか否かを返す
public function supportsIdentityAutoUpdate(): bool
type | summary |
---|---|
bool | |
[m] supportsInsertSet INSERT SET 拡張構文が使えるか否かを返す
INSERT SET 拡張構文が使えるか否かを返す
public function supportsInsertSet(): bool
type | summary |
---|---|
bool | |
[m] supportsReplace REPLACE が使えるか否かを返す
REPLACE が使えるか否かを返す
public function supportsReplace(): bool
type | summary |
---|---|
bool | |
[m] supportsMerge MERGE が使えるか否かを返す
MERGE が使えるか否かを返す
public function supportsMerge(): bool
type | summary |
---|---|
bool | |
[m] supportsBulkMerge BULK MERGE が使えるか否かを返す
BULK MERGE が使えるか否かを返す
public function supportsBulkMerge(): bool
type | summary |
---|---|
bool | |
[m] supportsIgnore IGNORE が使えるか否かを返す
IGNORE が使えるか否かを返す
public function supportsIgnore(): bool
type | summary |
---|---|
bool | |
[m] supportsUpdateLimit UPDATE + ORDER BY,LIMIT をサポートするか否かを返す
UPDATE + ORDER BY,LIMIT をサポートするか否かを返す
public function supportsUpdateLimit(): bool
type | summary |
---|---|
bool | |
[m] supportsDeleteLimit DELETE + ORDER BY,LIMIT をサポートするか否かを返す
DELETE + ORDER BY,LIMIT をサポートするか否かを返す
public function supportsDeleteLimit(): bool
type | summary |
---|---|
bool | |
[m] supportsUnionParentheses UNION が括弧をサポートするか否かを返す
UNION が括弧をサポートするか否かを返す
public function supportsUnionParentheses(): bool
type | summary |
---|---|
bool | |
[m] supportsResetAutoIncrementOnTruncate TRUNCATE 文で自動採番列がリセットされるか否かを返す
TRUNCATE 文で自動採番列がリセットされるか否かを返す
public function supportsResetAutoIncrementOnTruncate(): bool
type | summary |
---|---|
bool | |
[m] supportsRowConstructor 行値式が有効か否かを返す
行値式が有効か否かを返す
public function supportsRowConstructor(): bool
type | summary |
---|---|
bool | |
[m] supportsCompatibleCharAndBinary char と binary に互換性があるかを返す
char と binary に互換性があるかを返す
public function supportsCompatibleCharAndBinary(): bool
type | summary |
---|---|
bool | |
[m] supportsRedundantOrderBy id asc,id desc のような冗長な ORDER BY を許すか
id asc,id desc のような冗長な ORDER BY を許すか
public function supportsRedundantOrderBy(): bool
type | summary |
---|---|
bool | |
[m] quoteIdentifierIfNeeded 必要に応じて識別子をエスケープする
必要に応じて識別子をエスケープする
public function quoteIdentifierIfNeeded(string $word): string
type | name | summary |
---|---|---|
string | $word |
|
type | summary |
---|---|
string | |
[m] escapeLike LIKE エスケープする
LIKE エスケープする
public function escapeLike( ryunosuke\dbml\Query\Queryable|string $word, string $escaper = "\\" ): string
type | name | summary |
---|---|---|
Queryable|string | $word |
|
string | $escaper = "\\" |
|
type | summary |
---|---|
string | |
[m] truncateString 文字列を指定長で切る
文字列を指定長で切る
public function truncateString( string $string, Doctrine\DBAL\Schema\Column $column ): string
type | name | summary |
---|---|---|
string | $string |
|
Column | $column |
|
type | summary |
---|---|
string | |
[m] getMergeSyntax MERGE 構文を返す
MERGE 構文を返す
public function getMergeSyntax(array $columns): ?string
type | name | summary |
---|---|---|
array | $columns |
|
type | summary |
---|---|
?string | |
[m] getReferenceSyntax 参照構文(mysql における VALUES)を返す
参照構文(mysql における VALUES)を返す
public function getReferenceSyntax(string $column): ?string
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
?string | |
[m] getInsertSelectSyntax INSERT で使う SELECT を返す
INSERT で使う SELECT を返す
public function getInsertSelectSyntax( array $column, string $condition ): string
type | name | summary |
---|---|---|
array | $column |
|
string | $condition |
|
type | summary |
---|---|
string | |
[m] getIdentityInsertSQL 自動採番を使うか切り替えるための SQL を返す
自動採番を使うか切り替えるための SQL を返す
public function getIdentityInsertSQL( string $tableName, bool $onoffflag ): string
type | name | summary |
---|---|---|
string | $tableName |
|
bool | $onoffflag |
|
type | summary |
---|---|
string | |
[m] getTruncateTableSQL TRUNCATE 文を返す
TRUNCATE 文を返す
public function getTruncateTableSQL( string $tableName, bool $cascade = false ): string
type | name | summary |
---|---|---|
string | $tableName |
|
bool | $cascade = false |
|
type | summary |
---|---|
string | |
[m] getIdentitySequenceName ID シーケンス名を返す
ID シーケンス名を返す
public function getIdentitySequenceName( ?string $tableName, ?string $columnName ): ?string
type | name | summary |
---|---|---|
?string | $tableName |
|
?string | $columnName |
|
type | summary |
---|---|
?string | |
[m] getIndexHintSQL インデックスヒント構文を返す
インデックスヒント構文を返す
public function getIndexHintSQL( array|string $index_name, string $mode = "FORCE" ): string
type | name | summary |
---|---|---|
array|string | $index_name |
|
string | $mode = "FORCE" |
|
type | summary |
---|---|
string | |
[m] appendLockSuffix クエリにロック構文を付加して返す
クエリにロック構文を付加して返す
public function appendLockSuffix( string $query, Doctrine\DBAL\LockMode|int $lockmode, string $lockoption ): string
type | name | summary |
---|---|---|
string | $query |
|
LockMode|int | $lockmode |
|
string | $lockoption |
|
type | summary |
---|---|
string | |
[m] getPrimaryCondition 条件配列を結合した Expression を返す
条件配列を結合した Expression を返す
public function getPrimaryCondition( array $wheres, string $prefix = "" ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
array | $wheres |
|
string | $prefix = "" |
|
type | summary |
---|---|
Expression | |
[m] getGroupConcatSyntax GROUP_CONCAT 構文を返す
GROUP_CONCAT 構文を返す
public function getGroupConcatSyntax( array|string $expr, ?string $separator = null, string|array|null $order = null ): string
type | name | summary |
---|---|---|
array|string | $expr |
結合式 |
?string | $separator = null |
セパレータ文字 |
string|array|null | $order = null |
句。これが活きるのは mysql のみ |
type | summary |
---|---|
string | GROUP_CONCAT 構文 |
[m] getSpaceshipSyntax null 許容演算子(<=>)構文を返す
null 許容演算子(<=>)構文を返す
public function getSpaceshipSyntax(string $column): string
$column はカラム名を想定しており、エスケープされないので注意すること。
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
string | |
[m] getWithRecursiveSyntax 再帰 WITH 句を返す
再帰 WITH 句を返す
public function getWithRecursiveSyntax(): string
type | summary |
---|---|
string | |
[m] getCountExpression count 表現を返す
count 表現を返す
public function getCountExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
Expression | |
[m] getMinExpression min 表現を返す
min 表現を返す
public function getMinExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
Expression | |
[m] getMaxExpression max 表現を返す
max 表現を返す
public function getMaxExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
Expression | |
[m] getSumExpression sum 表現を返す
sum 表現を返す
public function getSumExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
type | summary |
---|---|
Expression | |
[m] getAvgExpression avg 表現を返す
avg 表現を返す
public function getAvgExpression(string $column): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
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) 形式でオブジェクト化できる。
type | name | summary |
---|---|---|
array | $keyvalues |
|
type | summary |
---|---|
Expression | |
[m] getJsonAggExpression JSON 集約表現を返す
JSON 集約表現を返す
public function getJsonAggExpression( array $keyvalues, $key = null ): ryunosuke\dbml\Query\Expression\Expression
$key を指定すると配列ではなくオブジェクトになる。
type | name | summary |
---|---|---|
array | $keyvalues |
|
| $key = null |
|
type | summary |
---|---|
Expression | |
[m] getConcatExpression 文字列結合句を返す
[m] getRegexpExpression 正規表現を返す
正規表現を返す
public function getRegexpExpression( string $column, string $pattern ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $column |
|
string | $pattern |
|
type | summary |
---|---|
Expression | |
[m] getBinaryExpression binary 表現を返す
binary 表現を返す
public function getBinaryExpression(string $data): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
string | $data |
|
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 のみ。
type | name | summary |
---|---|---|
int | $precision = 0 |
|
type | summary |
---|---|
Expression | |
[m] getSleepExpression sleep 表現を返す
sleep 表現を返す
public function getSleepExpression(float $second): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
float | $second |
|
type | summary |
---|---|
Expression | |
[m] getRandomExpression random 表現([0~1.0))を返す
random 表現([0~1.0))を返す
public function getRandomExpression(?int $seed): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
?int | $seed |
|
type | summary |
---|---|
Expression | |
[m] getResetSequenceExpression AUTO_INCREMENT のセット構文を返す
AUTO_INCREMENT のセット構文を返す
public function getResetSequenceExpression( string $tableName, string $columnName, int $seq ): array
type | name | summary |
---|---|---|
string | $tableName |
|
string | $columnName |
|
int | $seq |
|
type | summary |
---|---|
array | |
[m] getSwitchForeignKeyExpression 外部キー有効無効切替構文を返す
外部キー有効無効切替構文を返す
public function getSwitchForeignKeyExpression( bool $enabled, ?string $table_name = null, ?string $fkname = null ): array
type | name | summary |
---|---|---|
bool | $enabled |
|
?string | $table_name = null |
|
?string | $fkname = null |
|
type | summary |
---|---|
array | |
[m] getIgnoreSyntax IGNORE 構文を返す
IGNORE 構文を返す
public function getIgnoreSyntax(): string
type | summary |
---|---|
string | |
[m] commentize 与えられた文をコメント化する
与えられた文をコメント化する
public function commentize( string $comment, bool $cstyle = false ): string
type | name | summary |
---|---|---|
string | $comment |
|
bool | $cstyle = false |
|
type | summary |
---|---|
string | |
[m] convertMergeData 挿入データと更新データで更新用カラム列を生成する
挿入データと更新データで更新用カラム列を生成する
public function convertMergeData( array $insertData, array $updateData ): array
type | name | summary |
---|---|---|
array | $insertData |
|
array | $updateData |
|
type | summary |
---|---|
array | |
[m] convertSelectExistsQuery EXISTS 構文を SELECT で使用できるようにする
EXISTS 構文を SELECT で使用できるようにする
public function convertSelectExistsQuery(ryunosuke\dbml\Query\Queryable|string $exists): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
Queryable|string | $exists |
|
type | summary |
---|---|
Expression | |
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
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 )
type | name | summary |
---|---|---|
AbstractSchemaManager | $schemaManger |
|
array | $listeners |
|
CacheInterface | $cache |
|
[m] refresh 一切のメタデータを削除する
一切のメタデータを削除する
public function refresh()
[m] setViewSource ビューオブジェクトのデータソースを設定する
ビューオブジェクトのデータソースを設定する
public function setViewSource(array $viewSource)
type | name | summary |
---|---|---|
array | $viewSource |
|
[m] addTable テーブルオブジェクトをメタデータに追加する
テーブルオブジェクトをメタデータに追加する
public function addTable(Doctrine\DBAL\Schema\Table $table)
type | name | summary |
---|---|---|
Table | $table |
|
[m] setTableColumn テーブルのカラムを変更する
テーブルのカラムを変更する
public function setTableColumn( string $table_name, string $column_name, $definitation )
存在しないカラムも指定できる。 その場合、普通に追加されるので仮想カラムとして扱うことができる。
null を渡すとカラムが削除される。
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 キーは「外部キー結合に使われるか?」の内部判定で使用されるので留意。
type | name | summary |
---|---|---|
ForeignKeyConstraint|string | $fkey |
|
array | $metadata |
|
[m] hasTable テーブルが存在するなら true を返す
テーブルが存在するなら true を返す
public function hasTable(string $table_name): bool
type | name | summary |
---|---|---|
string | $table_name |
|
type | summary |
---|---|
bool | |
[m] getTableNames テーブル名一覧を取得する
テーブル名一覧を取得する
public function getTableNames(): array
type | summary |
---|---|
array | |
[m] getTable テーブルオブジェクトを取得する
テーブルオブジェクトを取得する
public function getTable(string $table_name): Doctrine\DBAL\Schema\Table
type | name | summary |
---|---|---|
string | $table_name |
|
type | summary |
---|---|
Table | |
[m] getTables パターン一致したテーブルオブジェクトを取得する
パターン一致したテーブルオブジェクトを取得する
public function getTables(array|string $table_pattern = []): array|Doctrine\DBAL\Schema\Table[]
type | name | summary |
---|---|---|
array|string | $table_pattern = [] |
|
type | summary |
---|---|
array|Table[] | テーブルオブジェクト配列 |
[m] getTableColumns テーブルのカラムオブジェクトを取得する
テーブルのカラムオブジェクトを取得する
public function getTableColumns( string $table_name, callable|int|null $filter = null ): array|Doctrine\DBAL\Schema\Column[]
type | name | summary |
---|---|---|
string | $table_name |
|
callable|int|null | $filter = null |
|
type | summary |
---|---|
array|Column[] | テーブルのカラムオブジェクト配列 |
[m] getTableColumnExpression テーブルカラムの表現を返す
テーブルカラムの表現を返す
public function getTableColumnExpression( string $table_name, string $column_name, string $type, ...$args )
type | name | summary |
---|---|---|
string | $table_name |
|
string | $column_name |
|
string | $type |
|
| ...$args |
|
[m] getTablePrimaryKey テーブルの主キーインデックスオブジェクトを取得する
テーブルの主キーインデックスオブジェクトを取得する
public function getTablePrimaryKey(string $table_name): ?Doctrine\DBAL\Schema\Index
type | name | summary |
---|---|---|
string | $table_name |
|
type | summary |
---|---|
?Index | |
[m] getTablePrimaryColumns テーブルの主キーカラムオブジェクトを取得する
テーブルの主キーカラムオブジェクトを取得する
public function getTablePrimaryColumns(string $table_name): array|Doctrine\DBAL\Schema\Column[]
type | name | summary |
---|---|---|
string | $table_name |
|
type | summary |
---|---|
array|Column[] | 主キーカラムオブジェクト配列 |
[m] getTableUniqueColumns テーブルの(主キーを除く)ユニークキーカラムオブジェクトを取得する
テーブルの(主キーを除く)ユニークキーカラムオブジェクトを取得する
public function getTableUniqueColumns( string $table_name, string $ukname = "" ): array|Doctrine\DBAL\Schema\Column[]
type | name | summary |
---|---|---|
string | $table_name |
|
string | $ukname = "" |
|
type | summary |
---|---|
array|Column[] | ユニークキーカラムオブジェクト配列 |
[m] getTableAutoIncrement テーブルのオートインクリメントカラムを取得する
テーブルのオートインクリメントカラムを取得する
public function getTableAutoIncrement(string $table_name): ?Doctrine\DBAL\Schema\Column
type | name | summary |
---|---|---|
string | $table_name |
|
type | summary |
---|---|
?Column | |
[m] getTableForeignKeys テーブルの外部キーオブジェクトを取得する
テーブルの外部キーオブジェクトを取得する
public function getTableForeignKeys(string $table_name): array|Doctrine\DBAL\Schema\ForeignKeyConstraint[]
type | name | summary |
---|---|---|
string | $table_name |
|
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 の指定もない場合は データベース上に存在する全ての外部キー
を取得する。
type | name | summary |
---|---|---|
?string | $to_table = null |
|
?string | $from_table = null |
|
type | summary |
---|---|
array|ForeignKeyConstraint[] | 外部キーオブジェクト配列 |
[m] getForeignTable 外部キーから関連テーブルを取得する
外部キーから関連テーブルを取得する
public function getForeignTable(Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey): array
type | name | summary |
---|---|---|
ForeignKeyConstraint|string | $fkey |
|
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)の方向が格納される
type | name | summary |
---|---|---|
string | $table_name1 |
|
string | $table_name2 |
|
?string | &$fkeyname = null |
|
?bool | &$direction = null |
|
type | summary |
---|---|
array | |
[m] addForeignKeyLazy テーブルに外部キーを追加する
テーブルに外部キーを追加する
public function addForeignKeyLazy( string $localTable, string $foreignTable, array|string $fkdata, ?string $fkname = null ): string
このメソッドで追加された外部キーはできるだけ遅延して追加され、必要になるまでは実行されない。
type | name | summary |
---|---|---|
string | $localTable |
|
string | $foreignTable |
|
array|string | $fkdata |
|
?string | $fkname = null |
|
type | summary |
---|---|
string | |
[m] addForeignKey テーブルに外部キーを追加する
テーブルに外部キーを追加する
public function addForeignKey( Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey, ?string $lTable = null ): Doctrine\DBAL\Schema\ForeignKeyConstraint
このメソッドで追加された外部キーはデータベースに反映されるわけでもないし、キャッシュにも乗らない。 あくまで「アプリ的にちょっとリレーションが欲しい」といったときに使用する想定。
type | name | summary |
---|---|---|
ForeignKeyConstraint | $fkey |
|
?string | $lTable = null |
|
type | summary |
---|---|
ForeignKeyConstraint | |
[m] ignoreForeignKey テーブルの外部キーを削除する
テーブルの外部キーを削除する
public function ignoreForeignKey( Doctrine\DBAL\Schema\ForeignKeyConstraint|string $fkey, ?string $lTable = null ): Doctrine\DBAL\Schema\ForeignKeyConstraint
このメソッドで削除された外部キーはデータベースに反映されるわけでもないし、キャッシュにも乗らない。 あくまで「アプリ的にちょっとリレーションを外したい」といったときに使用する想定。
type | name | summary |
---|---|---|
ForeignKeyConstraint|string | $fkey |
|
?string | $lTable = null |
|
type | summary |
---|---|
ForeignKeyConstraint | |
[m] getRelation 外部キーから [table => [columnA => [table => [column => FK]]]] な配列を生成する
外部キーから [table => [columnA => [table => [column => FK]]]] な配列を生成する
public function getRelation(): array
外部キーがループしてると導出が困難なため、木構造ではなく単純なフラット配列にしてある。 (自身へアクセスすれば木構造的に辿ることは可能)。
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 確定した外部キーが格納される。
type | name | summary |
---|---|---|
string | $to_table |
|
string | $from_table |
|
?ForeignKeyConstraint | &$fkey = null |
|
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
返り値のキーには辿ったパス(テーブル)が / 区切りで格納される。
type | name | summary |
---|---|---|
string | $to_table |
|
string | $from_table |
|
string | $from_column |
|
type | summary |
---|---|
array | |
[N] ryunosuke\dbml\Mixin\
[T] OptionTrait オプションを保持し、get/set できるようにする trait
オプションを保持し、get/set できるようにする trait
use する側は必ず getDefaultOptions を実装する。
このトレイトを使うと「その場限りの設定変更」が容易になる。
具体的には stack/unstack
や context
を使用して一時的に設定を変更し、不要になったときに一気に戻す。
stack/unstack
や context
の違いは「明示的に戻す必要があるか」である。以下に例を挙げる。
# 今だけは 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
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
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 が格納される。
type | name | summary |
---|---|---|
string | $name |
|
array | $arguments |
|
?bool | &$called |
|
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 が格納される
type | name | summary |
---|---|---|
string | $name |
|
array | $arguments |
|
?bool | &$called |
|
type | summary |
---|---|
mixed | |
[m] OptionTrait__call マジックメソッド __call 用メソッド
マジックメソッド __call 用メソッド
protected function OptionTrait__call( string $name, array $arguments ): mixed
OptionTrait__callGetSet と OptionTrait__callOption を呼び出し、マッチしなければ例外を投げる。
type | name | summary |
---|---|---|
string | $name |
|
array | $arguments |
|
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
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
[m] setDefault デフォルト値を設定する
デフォルト値を設定する
public function setDefault(array $overridden = []): ryunosuke\dbml\Mixin\OptionTrait
このメソッドでオプション項目が確定するので、これを呼ばないと何も出来ない。
type | name | summary |
---|---|---|
array | $overridden = [] |
|
type | summary |
---|---|
OptionTrait | |
[m] getOriginal 大本のオブジェクトを返す
大本のオブジェクトを返す
public function getOriginal(): ryunosuke\dbml\Mixin\OptionTrait
ryunosuke\dbml\Mixin\OptionTrait::context() している場合に、オリジナルの $this を返す。
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();
type | name | summary |
---|---|---|
array | $options = [] |
|
bool | $shallow = false |
|
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();
type | name | summary |
---|---|---|
array | $options = [] |
|
type | summary |
---|---|
OptionTrait | |
[m] unstack ryunosuke\dbml\Mixin\OptionTrait::stack()") で積んだオプションを復元する
ryunosuke\dbml\Mixin\OptionTrait::stack() で積んだオプションを復元する
public function unstack(): ryunosuke\dbml\Mixin\OptionTrait
type | summary |
---|---|
OptionTrait | |
[m] unstackAll 戻せるまで ryunosuke\dbml\Mixin\OptionTrait::unstack()") する
戻せるまで ryunosuke\dbml\Mixin\OptionTrait::unstack() する
public function unstackAll(): ryunosuke\dbml\Mixin\OptionTrait
type | summary |
---|---|
OptionTrait | |
[m] getOptions 全オプション値を返却する
全オプション値を返却する
public function getOptions(): array
type | summary |
---|---|
array | |
[m] getOption 単一のオプション値を返却する
単一のオプション値を返却する
public function getOption(string $name): mixed
オプション名が存在しない場合、例外が飛ぶ。
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
mixed | |
[m] getUnsafeOption 単一のオプション値を返却する(キーチェックなし)
単一のオプション値を返却する(キーチェックなし)
protected function getUnsafeOption(string $name): mixed
オプション名が存在しない場合、例外は飛ばないが notice は出るかもしれない。
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
mixed | |
[m] setOptions 配列でオプション値を設定する
配列でオプション値を設定する
public function setOptions(array $options): ryunosuke\dbml\Mixin\OptionTrait
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
OptionTrait | |
[m] setOption 単一のオプション値を設定する
単一のオプション値を設定する
public function setOption( string $name, mixed $value ): ryunosuke\dbml\Mixin\OptionTrait
オプション名が存在しない場合、例外が飛ぶ。
type | name | summary |
---|---|---|
string | $name |
|
mixed | $value |
|
type | summary |
---|---|
OptionTrait | |
[m] setUnsafeOption 単一のオプション値を設定する(キーチェックなし)
単一のオプション値を設定する(キーチェックなし)
protected function setUnsafeOption( string $name, mixed $value ): ryunosuke\dbml\Mixin\OptionTrait
オプション名が存在しない場合、例外は飛ばないし、 getDefaultOptions で規定されている項目外も設定可能。
type | name | summary |
---|---|---|
string | $name |
|
mixed | $value |
|
type | summary |
---|---|
OptionTrait | |
[m] storeOptions 配列でオプション値を設定し、返り値として元の値に戻すクロージャを返す
配列でオプション値を設定し、返り値として元の値に戻すクロージャを返す
public function storeOptions(array $options): \Closure
// 設定を hoge:1 にする $restore = $that->storeOptions(['hoge' => 1]); // この時点では hoge:1 のまま $that->something(); // $retore を呼ぶと設定が元に戻る $retore();
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
Closure | |
[m] mergeOption 配列のオプション値をマージする
配列のオプション値をマージする
public function mergeOption( string $name, array $options ): ryunosuke\dbml\Mixin\OptionTrait
type | name | summary |
---|---|---|
string | $name |
|
array | $options |
|
type | summary |
---|---|
OptionTrait | |
[m] mergeUnsafeOption 配列のオプション値をマージする(キーチェックなし)
配列のオプション値をマージする(キーチェックなし)
protected function mergeUnsafeOption( string $name, array $options ): ryunosuke\dbml\Mixin\OptionTrait
type | name | summary |
---|---|---|
string | $name |
|
array | $options |
|
type | summary |
---|---|
OptionTrait | |
[m] existsOption オプションが存在するなら true を返す
オプションが存在するなら true を返す
public function existsOption(string $name): bool
type | name | summary |
---|---|---|
string | $name |
|
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');
type | name | summary |
---|---|---|
string | $name |
|
mixed | $value = null |
|
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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
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()")) |
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 = [] )
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 = [] )
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 = [] )
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 = [] )
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 = [] )
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 = [] )
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 = [] )
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]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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)
type | name | summary |
---|---|---|
array|string | $tableDescriptor |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
bool | $for_update = false |
EXISTS チェックはしばしばロックを伴うのでそのフラグ |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
取得テーブルとカラム |
array|string | $where = [] |
条件 |
array|string | $groupBy = [] |
カラム名かその配列 |
array|string | $having = [] |
条件 |
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'), ]);
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
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
type | name | summary |
---|---|---|
array|string | $tableDescriptor = [] |
取得テーブルとカラム(ryunosuke\dbml\Query\TableDescriptor) |
array|string | $where = [] |
WHERE 条件(ryunosuke\dbml\Query\SelectBuilder::where()")) |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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
type | name | summary |
---|---|---|
array|string | $column |
サブテーブル名 |
array | $where = [] |
WHERE 条件 |
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]);
type | name | summary |
---|---|---|
array|string|Closure | $caller |
プロバイダ |
type | summary |
---|---|
IteratorTrait | |
[m] resetProvider 結果セットプロバイダを解除する
結果セットプロバイダを解除する
public function resetProvider(): ryunosuke\dbml\Mixin\IteratorTrait
type | summary |
---|---|
IteratorTrait | |
[m] resetResult 結果セットをクリアして無効化する
結果セットをクリアして無効化する
public function resetResult(): ryunosuke\dbml\Mixin\IteratorTrait
type | summary |
---|---|
IteratorTrait | |
[m] getResult 結果セットを取得する
結果セットを取得する
public function getResult(): array
結果はキャッシュされるため、複数回呼んでも問題ない。
type | summary |
---|---|
array | |
[m] getIterator 結果セットのイテレータを返す
結果セットのイテレータを返す
public function getIterator(): \Traversable
type | summary |
---|---|
Traversable | |
type | summary |
---|---|
http://php.net/manual/en/iteratoraggregate.getiterator.php | |
[m] count 結果セットの件数を返す
結果セットの件数を返す
public function count(): int
type | summary |
---|---|
int | |
type | summary |
---|---|
http://php.net/manual/en/countable.count.php | |
[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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
string|array | $on = [] |
結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える |
?string | $fkeyname = null |
外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外) |
| $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
[T] FindTrait
Hierarchy
[m] find 主キー指定でレコードを取得する
主キー指定でレコードを取得する
public function find( mixed $variadic_primary, mixed $tableDescriptor = [] ): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
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
type | name | summary |
---|---|---|
mixed | $variadic_primary |
主キー値あるいは配列 |
mixed | $tableDescriptor = [] |
取得カラム |
type | summary |
---|---|
SelectBuilder | |
[T] FactoryTrait 拡張クラスを返せるようにする trait
拡張クラスを返せるようにする trait
insteadof して new するとそのクラスを返す。
Hierarchy
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
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
type | summary |
---|---|
AbstractBuilder | |
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
Stringable | |
IteratorAggregate | |
Countable | |
Traversable | |
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
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$database | |
[p] $sql
[p] $params
protected array $params
Type: array
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$params | |
[p] $statement
protected ryunosuke\dbml\Query\Statement $statement
Type: Statement
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$statement | |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
override | AbstractBuilder::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[m] __construct コンストラクタ
コンストラクタ
public function __construct(ryunosuke\dbml\Database $database)
type | name | summary |
---|---|---|
Database | $database |
|
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());
となり表現が平易となる。
type | name | summary |
---|---|---|
AbstractClause | ...$clauses |
|
type | summary |
---|---|
SelectBuilder | |
[m] __toString クエリ文字列を返す
クエリ文字列を返す
public function __toString(): string
type | summary |
---|---|
string | |
[m] cast 取得クラスを指定。クラス名ならそのクラスで、コールバックならそれの呼び出し、になる
取得クラスを指定。クラス名ならそのクラスで、コールバックならそれの呼び出し、になる
public function cast(null|string|callable $classname = null): ryunosuke\dbml\Query\SelectBuilder
このメソッドを使うとこのインスタンスが返すレコード配列の型を指定できる。 指定の方法は大まかには下記の4種類。
- callable (行配列を受け取るクロージャ)
- 最も汎用性がある
- クラス名
- 与えたクラスのインスタンスで返却されるようになる
- null (あるいは未指定)
- 駆動表から導き出されるエンティティクラスで返却されるようになる(指定がない場合はデフォルトエンティティ)
- "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 で設定したものを解除できるという重要な役割がある
なお、 このメソッドを呼んでも、 lists
や pairs
には一切影響しない。
これらは配列を返すメソッドであり、「レコード」という概念が通用しない。 value
もスカラー値なので同様。
type | name | summary |
---|---|---|
null|string|callable | $classname = null |
取得クラス |
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
type | name | summary |
---|---|---|
?string | $operator |
|
mixed | $operands = [] |
|
type | summary |
---|---|
SelectBuilder | |
[m] build 各種設定メソッドへのプロクシメソッド
各種設定メソッドへのプロクシメソッド
public function build( array $queryParts, bool $append = false ): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
array | $queryParts |
|
bool | $append = false |
|
type | summary |
---|---|
SelectBuilder | |
[m] scope スコープを当てる
スコープを当てる
public function scope( string $tablename, array|string $scope, ...$args ): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
string | $tablename |
|
array|string | $scope |
|
| ...$args |
|
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)
type | name | summary |
---|---|---|
?string | $lazyMode = null |
|
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 を指定すると削除として働く。
type | name | summary |
---|---|---|
string | $name |
|
Queryable|string|null | $query |
|
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
type | name | summary |
---|---|---|
?string | $option |
|
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 として動作する ], ]);
type | name | summary |
---|---|---|
| $tableDescriptor |
|
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
type | name | summary |
---|---|---|
| $tableDescriptor |
|
?string | $parent = null |
|
bool | $defaultScoped = false |
|
type | summary |
---|---|
SelectBuilder | |
[m] select select 列を設定する(クリア版)
select 列を設定する(クリア版)
public function select(...$selects): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
| ...$selects |
|
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
type | name | summary |
---|---|---|
| ...$selects |
|
type | summary |
---|---|
SelectBuilder | |
[m] unselect カラム・エイリアスの完全一致で select 句から取り除く
カラム・エイリアスの完全一致で select 句から取り除く
public function unselect(...$aliases): ryunosuke\dbml\Query\SelectBuilder
クロージャを与えるとコールバックされ、 true 相当を返した時に取り除かれる。 文字列を与えるとエイリアス or 完全カラムに一致した時に取り除かれる。 数値を与えるとその番目が取り除かれる(都度連番はリセットされるので注意)。
type | name | summary |
---|---|---|
| ...$aliases |
|
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() を使用すれば基本的に不要)。
type | name | summary |
---|---|---|
| $table |
|
?string | $alias = null |
|
?string | $type = null |
|
| $condition = [] |
|
?string | $fkeyname = null |
|
?string | $fromAlias = null |
|
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))
type | name | summary |
---|---|---|
string | $type |
|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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)
type | name | summary |
---|---|---|
| $condition |
|
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
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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))
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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))
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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
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)
type | name | summary |
---|---|---|
string | $name |
|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] addWindow WINDOW 句(追加版)
WINDOW 句(追加版)
public function addWindow( string $name, $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
string | $name |
|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
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
type | name | summary |
---|---|---|
| ...$groupBy |
|
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
type | name | summary |
---|---|---|
| ...$groupBy |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
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() と同じ。
type | name | summary |
---|---|---|
| ...$predicates |
|
type | summary |
---|---|
SelectBuilder | |
[m] endHaving 現在の条件をブロック化する
現在の条件をブロック化する
public function endHaving(): ryunosuke\dbml\Query\SelectBuilder
WHERE ではなく HAVING である点を除いて引数体系などは ryunosuke\dbml\Query\SelectBuilder::endWhere() と同じ。
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
type | name | summary |
---|---|---|
| $sort |
|
| $order = null |
|
?string | $nullsOrder = null |
|
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
type | name | summary |
---|---|---|
| $sort |
|
| $order = null |
|
?string | $nullsOrder = null |
|
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
type | name | summary |
---|---|---|
array|int|null | $count |
|
?int | $offset = null |
|
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
type | name | summary |
---|---|---|
int | $page |
|
?int | $limit = null |
|
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
type | name | summary |
---|---|---|
array|string | $comment |
|
string | $clause = "" |
|
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'
type | name | summary |
---|---|---|
| $query |
|
type | summary |
---|---|
SelectBuilder | |
[m] unionAll UNION ALL する
UNION ALL する
public function unionAll($query): ryunosuke\dbml\Query\SelectBuilder
ALL で UNION される以外は ryunosuke\dbml\Query\SelectBuilder::union() と全く同じ。
type | name | summary |
---|---|---|
| $query |
|
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')
type | name | summary |
---|---|---|
bool | $affirmation = true |
|
bool | $for_update = false |
|
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'
type | name | summary |
---|---|---|
string | $column = "*" |
|
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() も同時に行う。
type | name | summary |
---|---|---|
?int|int | $currentpage |
|
?int|int | $countperpage |
|
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() も同時に行う。
type | name | summary |
---|---|---|
?array|array | $condition |
|
?int|int | $count |
|
?bool|bool | $orderbyasc = true |
|
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 で返されるので分割されていることは意識しなくて良い)
type | name | summary |
---|---|---|
int | $chunk |
|
?string | $column = null |
|
| $fixrange = false |
|
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], ];
type | name | summary |
---|---|---|
array | $predicates |
|
int | $limit = 1 |
|
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 される。
type | name | summary |
---|---|---|
?Closure | $callback = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] after fectch 後の処理を登録
fectch 後の処理を登録
public function after(?\Closure $callback = null): ryunosuke\dbml\Query\SelectBuilder
タイミング以外の仕様は ryunosuke\dbml\Query\SelectBuilder::before() と同じ。
type | name | summary |
---|---|---|
?Closure | $callback = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] postselect 行フェッチ後に SelectBuilder 特有の処理を行う
行フェッチ後に SelectBuilder 特有の処理を行う
public function postselect( array $parents, bool $continuity = false ): array
ほぼ内部処理で明示的に呼ぶことはない。
type | name | summary |
---|---|---|
array | $parents |
|
bool | $continuity = false |
|
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
type | name | summary |
---|---|---|
string | $keyword1 |
|
string | $keyword2 = "" |
|
?string | $name = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] exists EXISTS でラップして返す
EXISTS でラップして返す
public function exists(): ryunosuke\dbml\Query\SelectBuilder
type | summary |
---|---|
SelectBuilder | |
[m] notExists NOT EXISTS でラップして返す
NOT EXISTS でラップして返す
public function notExists(): ryunosuke\dbml\Query\SelectBuilder
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() のためのヘルパーメソッドで、明示的には呼ばれないし呼ばない。
type | name | summary |
---|---|---|
array|string | $aggregations |
|
int | $select_limit = ryunosuke\dbml\Query\PHP_INT_MAX |
|
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)');
type | name | summary |
---|---|---|
?string | $hint |
|
?string | $talias = null |
|
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
type | name | summary |
---|---|---|
string | $lockoption = "" |
|
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
type | name | summary |
---|---|---|
string | $lockoption = "" |
|
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
type | summary |
---|---|
SelectBuilder | |
[m] detectAutoOrder 自動 OrderBy の有効無効を設定する
自動 OrderBy の有効無効を設定する
public function detectAutoOrder(?bool $use): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
?bool | $use |
|
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);
type | name | summary |
---|---|---|
?string | $name = null |
|
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', ], ];
type | summary |
---|---|
array | |
[m] getQueryPart SQL の各句を返す
SQL の各句を返す
public function getQueryPart(?string $queryPartName): mixed
type | name | summary |
---|---|---|
?string | $queryPartName |
|
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
type | name | summary |
---|---|---|
array|string|null | $queryPartName = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] reset すべてを無に帰す
すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\SelectBuilder
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();
type | name | summary |
---|---|---|
null|int|false | $ttl = null |
キャッシュ期限(null はキャッシュドライバーのデフォルトに従う。false は解除) |
type | summary |
---|---|
SelectBuilder | |
[m] getCacheTtl 内部向け
内部向け
public function getCacheTtl(): ?int
type | summary |
---|---|
?int | |
[m] fetch 取得方法指定で Database にクエリを投げる
取得方法指定で Database にクエリを投げる
public function fetch( string $method, iterable $params = [] )
実際は下記のようなエイリアスメソッドが定義されているのでそちらを使うことが多く、明示的に呼ぶことはほとんどない。
type | name | summary |
---|---|---|
string | $method |
|
iterable | $params = [] |
|
[m] array
public function array(iterable $params = []): ryunosuke\dbml\Query\SelectBuilder|array|ryunosuke\dbml\Entity\Entityable[]
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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', ], ];
type | name | summary |
---|---|---|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchMethodTrait::fetchValueWithoutSql() | レコードの配列を返す |
[m] fetchOrThrow
public function fetchOrThrow( string $method, iterable $params = [] )
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
type | name | summary |
---|---|---|
?int | $chunk = null |
|
?string | $method = null |
|
iterable | $params = [] |
|
type | summary |
---|---|
Yielder | |
[m] getLazyMode 内部向け
内部向け
public function getLazyMode(): ?string
type | summary |
---|---|
?string | |
[m] getLazyChunk 内部向け
内部向け
public function getLazyChunk(): ?int
type | summary |
---|---|
?int | |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
[m] getParams パラメータを返す
パラメータを返す
public function getParams(?string $queryPartName = null): array
type | name | summary |
---|---|---|
?string | $queryPartName = null |
|
type | summary |
---|---|
array | |
[m] _precondition WHERE/HAVING 条件を正規化する
WHERE/HAVING 条件を正規化する
protected function _precondition( array $tables, array $predicates ): array
where だけは select,affect の両方に出現し得る(厳密に言えば order や limit もだけど)のでここに定義してある。
type | name | summary |
---|---|---|
array | $tables |
|
array | $predicates |
|
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::_precondition() | WHERE/HAVING 条件を正規化する |
[m] getDatabase
public function getDatabase(): ryunosuke\dbml\Database
type | summary |
---|---|
Database | |
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]
type | name | summary |
---|---|---|
| $data |
|
?array | &$params |
|
type | summary |
---|---|
array|string | |
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")
type | summary |
---|---|
AbstractBuilder | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::prepare() | 現在のビルダの状態で固定して prepare する |
[m] getPreparedStatement prepare したステートメントを返す
prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
type | summary |
---|---|
?Statement | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::getPreparedStatement() | prepare したステートメントを返す |
[m] queryInto パラメータを利用してクエリ化
パラメータを利用してクエリ化
public function queryInto(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::queryInto() | パラメータを利用してクエリ化 |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::merge() | パラメータをマージして文字列表現を返す |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::checkUnknownOption() | |
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
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
type | name | summary |
---|---|---|
| $table |
|
| $on |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
?string | $fkeyname = null |
|
?string | $from = null |
|
type | summary |
---|---|
SelectBuilder | |
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
type | name | summary |
---|---|---|
| $table |
|
string|array | $on = [] |
結合条件。 ryunosuke\dbml\Gateway\TableGateway::where()") と同じ形式が使える |
?string | $fkeyname = null |
外部キー名称。省略時は唯一の外部キーを使用(無かったり2個以上ある場合は例外) |
| $from = null |
|
type | summary |
---|---|
TableGateway | |
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[]
type | name | summary |
---|---|---|
iterable | $params = [] |
|
type | summary |
---|---|
SelectBuilder|array|Entityable[] | |
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 = [])
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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 = [])
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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 = [])
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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 = [])
type | name | summary |
---|---|---|
iterable | $params = [] |
|
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 = [])
type | name | summary |
---|---|---|
iterable | $params = [] |
|
kind | source | summary |
---|---|---|
instead | FetchOrThrowTrait::fetchValueOrThrowWithoutSql() | ryunosuke\dbml\Query\SelectBuilder::value()") の例外送出版 |
[m] getDefaultLazyMode
public function getDefaultLazyMode(): string
type | summary |
---|---|
string | |
[m] setDefaultLazyMode
public function setDefaultLazyMode(mixed $string): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
SelectBuilder | |
[m] getDefaultScope
public function getDefaultScope(): array
type | summary |
---|---|
array | |
[m] setDefaultScope
public function setDefaultScope(mixed $array): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $array |
|
type | summary |
---|---|
SelectBuilder | |
[m] getDefaultOrder
public function getDefaultOrder(): mixed
type | summary |
---|---|
mixed | |
[m] setDefaultOrder
public function setDefaultOrder(mixed $mixed): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $mixed |
|
type | summary |
---|---|
SelectBuilder | |
[m] getPrimarySeparator
public function getPrimarySeparator(): string
type | summary |
---|---|
string | |
[m] setPrimarySeparator
public function setPrimarySeparator(mixed $string): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
SelectBuilder | |
[m] getAggregationDelimiter
public function getAggregationDelimiter(): string
type | summary |
---|---|
string | |
[m] setAggregationDelimiter
public function setAggregationDelimiter(mixed $string): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
SelectBuilder | |
[m] getArrayFetch
public function getArrayFetch(): string
type | summary |
---|---|
string | |
[m] setArrayFetch
public function setArrayFetch(mixed $string): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $string |
|
type | summary |
---|---|
SelectBuilder | |
[m] getNullsOrder
public function getNullsOrder(): string
type | summary |
---|---|
string | |
[m] setNullsOrder
public function setNullsOrder(mixed $string = null): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $string = null |
|
type | summary |
---|---|
SelectBuilder | |
[m] getPropagateLockMode
public function getPropagateLockMode(): int|Doctrine\DBAL\LockMode
type | summary |
---|---|
int|LockMode | |
[m] setPropagateLockMode
public function setPropagateLockMode(mixed $lockMode): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $lockMode |
|
type | summary |
---|---|
SelectBuilder | |
[m] getInjectChildColumn
public function getInjectChildColumn(): bool
type | summary |
---|---|
bool | |
[m] setInjectChildColumn これは phpstorm の as keyword が修正されたら不要になる
これは phpstorm の as keyword が修正されたら不要になる
public function setInjectChildColumn(mixed $bool): ryunosuke\dbml\Query\SelectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
SelectBuilder | |
[C] AbstractBuilder
Hierarchy
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
Stringable | |
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)
type | name | summary |
---|---|---|
Database | $database |
|
[m] _precondition WHERE/HAVING 条件を正規化する
WHERE/HAVING 条件を正規化する
protected function _precondition( array $tables, array $predicates ): array
where だけは select,affect の両方に出現し得る(厳密に言えば order や limit もだけど)のでここに定義してある。
type | name | summary |
---|---|---|
array | $tables |
|
array | $predicates |
|
type | summary |
---|---|
array | |
[m] getDatabase
public function getDatabase(): ryunosuke\dbml\Database
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]
type | name | summary |
---|---|---|
| $data |
|
?array | &$params |
|
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")
type | summary |
---|---|
AbstractBuilder | |
[m] getPreparedStatement prepare したステートメントを返す
prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
type | summary |
---|---|
?Statement | |
[m] queryInto パラメータを利用してクエリ化
パラメータを利用してクエリ化
public function queryInto(): string
type | summary |
---|---|
string | |
[m] reset すべてを無に帰す
すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\AbstractBuilder
type | summary |
---|---|
AbstractBuilder | |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::getQuery() | クエリ文字列を返す |
[m] getParams パラメータを返す
パラメータを返す
public function getParams(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | Queryable::getParams() | パラメータを返す |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::merge() | パラメータをマージして文字列表現を返す |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | OptionTrait::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
instead | OptionTrait::checkUnknownOption() | |
[m] __toString
abstract public function __toString(): string
type | summary |
---|---|
string | |
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 )
type | name | summary |
---|---|---|
| $key |
|
int | $errorMode |
|
[m] __construct
public function __construct( $original, int $errorMode = self::ERROR_MODE_EXCEPTION )
type | name | summary |
---|---|---|
| $original |
|
int | $errorMode = self::ERROR_MODE_EXCEPTION |
|
[m] convertPartialSQL クエリをプレースホルダー単位で分割する
クエリをプレースホルダー単位で分割する
public function convertPartialSQL(string $sql): array
汎用的に使う(わざわざ visitor を使わずにサクッとパースしたいことがある)。
type | name | summary |
---|---|---|
string | $sql |
|
type | summary |
---|---|
array | |
[m] convertNamedSQL クエリを名前付きプレースホルダーに統一する
クエリを名前付きプレースホルダーに統一する
public function convertNamedSQL( string $sql, iterable &$params ): string
位置プレースホルダが足りなかったり多かったりしたら例外を投げる。 元からある名前付きプレースホルダーには言及しない。もしあってもそのまま追加される。
type | name | summary |
---|---|---|
string | $sql |
|
iterable | &$params |
|
type | summary |
---|---|
string | |
[m] convertPositionalSQL クエリを位置プレースホルダーに統一する
クエリを位置プレースホルダーに統一する
public function convertPositionalSQL( string $sql, iterable &$params, ?array &$paramMap = [], ?callable $callback = null ): string
名前付きプレースホルダが足りなかったり多かったりしたら例外を投げる。 元からある位置プレースホルダーには言及しない。もしあってもそのまま追加される。
1つのプレースホルダーが複数に対応することもあるので呼び元で適宜 $paramMap を使って読み替えなければならない。 $callback で位置記号のコールバックを指定できるが、普通は ? で十分であり、指定するのは実質的に PostgreSql 専用。
type | name | summary |
---|---|---|
string | $sql |
|
iterable | &$params |
|
?array | &$paramMap = [] |
|
?callable | $callback = null |
|
type | summary |
---|---|
string | |
[m] convertDollarSQL
public function convertDollarSQL( string $sql, iterable &$params, ?array &$paramMap = [] )
type | name | summary |
---|---|---|
string | $sql |
|
iterable | &$params |
|
?array | &$paramMap = [] |
|
type | summary |
---|---|
Parser::convertPositionalSQL() | |
[m] convertQuotedSQL クエリのプレースホルダーに値を埋め込んで完全なクエリにする
クエリのプレースホルダーに値を埋め込んで完全なクエリにする
public function convertQuotedSQL( string $sql, iterable $params, callable $quoter ): string
プレースホルダの数や種類が完全に一致していないと例外を投げる。
値の埋め込みは本質的に危険なので避けるべきだが、一部の内部処理や代替がない場合に埋め込む必要性が稀にある。
type | name | summary |
---|---|---|
string | $sql |
|
iterable | $params |
|
callable | $quoter |
|
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
となる(カラムで結合する))
テーブルのサフィックスとして
- 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+id
(ORDER BY id ASC
となる) - e.g.
tablename-create_date+id
(ORDER 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-200
(LIMIT 50 OFFSET 150
となり範囲を表す) - e.g.
tablename#100
(LIMIT 1 OFFSET 100
となり単一の1行を表す) - e.g.
tablename#-100
(LIMIT 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[]
type | name | summary |
---|---|---|
Database | $database |
|
array|string | $descriptor |
|
array|string | $columnIfString = ["*"] |
|
type | summary |
---|---|
TableDescriptor[] | 自身の配列 |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, string $descriptor, $cols )
type | name | summary |
---|---|---|
Database | $database |
|
string | $descriptor |
|
| $cols |
|
[m] __get
public function __get(string $name): mixed
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
mixed | |
[m] __set
public function __set( string $name, mixed $value )
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 のみ。 いずれ拡張するにしても全うなクエリ順にする見込み。
type | name | summary |
---|---|---|
Database | $database |
|
array | $params |
|
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 になる)。
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
type | summary |
---|---|
DebugInfoTrait | |
[m] __construct
public function __construct( string $query, iterable $params, ryunosuke\dbml\Database $database )
type | name | summary |
---|---|---|
string | $query |
|
iterable | $params |
|
Database | $database |
|
[m] executeSelect 取得系クエリとして実行する
取得系クエリとして実行する
public function executeSelect( iterable $params = [], ?Doctrine\DBAL\Connection $connection = null ): Doctrine\DBAL\Result
type | name | summary |
---|---|---|
iterable | $params = [] |
|
?Connection | $connection = null |
|
type | summary |
---|---|
Result | |
[m] executeAffect 更新系クエリとして実行する
更新系クエリとして実行する
public function executeAffect( iterable $params = [], ?Doctrine\DBAL\Connection $connection = null ): int
type | name | summary |
---|---|---|
iterable | $params = [] |
|
?Connection | $connection = null |
|
type | summary |
---|---|
int | |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::getQuery() | クエリ文字列を返す |
[m] getParams パラメータを返す
パラメータを返す
public function getParams(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | Queryable::getParams() | パラメータを返す |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::merge() | パラメータをマージして文字列表現を返す |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[C] AffectBuilder AFFECT ビルダークラス
AFFECT ビルダークラス
現在のところは内部向けであり、このクラスを用いて何らかのクエリを生成するのは非推奨。
Hierarchy
type | summary |
---|---|
AbstractBuilder | |
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
Stringable | |
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
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$database | |
[p] $sql
[p] $params
protected array $params
Type: array
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$params | |
[p] $statement
protected ryunosuke\dbml\Query\Statement $statement
Type: Statement
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::$statement | |
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
override | AbstractBuilder::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[m] __toString
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Stringable::__toString() | |
[m] build
public function build( array $queryParts, bool $append = false ): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
array | $queryParts |
|
bool | $append = false |
|
type | summary |
---|---|
AffectBuilder | |
[m] wildUpdate
public function wildUpdate( array $updateData, array $insertData, bool $useReference ): array
type | name | summary |
---|---|---|
array | $updateData |
|
array | $insertData |
|
bool | $useReference |
|
type | summary |
---|---|
array | |
[m] normalize
public function normalize($row): array
type | name | summary |
---|---|---|
| $row |
|
type | summary |
---|---|
array | |
[m] tableAs
public function tableAs(): string
type | summary |
---|---|
string | |
[m] restrictWheres
public function restrictWheres(string $event): array
type | name | summary |
---|---|---|
string | $event |
|
type | summary |
---|---|
array | |
[m] cascadeValues
public function cascadeValues(Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey): array
type | name | summary |
---|---|---|
ForeignKeyConstraint | $fkey |
|
type | summary |
---|---|
array | |
[m] cascadeWheres
public function cascadeWheres(Doctrine\DBAL\Schema\ForeignKeyConstraint $fkey): array
type | name | summary |
---|---|---|
ForeignKeyConstraint | $fkey |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $column = null |
|
| $rows = null |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $sql = null |
|
| $columns = [] |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $data = null |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $data = null |
|
| $where = [] |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $insertData = null |
|
| $updateData = [] |
|
| $uniquekey = "" |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $data = null |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $data = null |
|
| $where = [] |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $data = null |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $insertData = null |
|
| $updateData = [] |
|
| $uniquekey = "" |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
array | $overrideData = [] |
|
| $where = [] |
|
| $sourceTable = null |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $where = [] |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
| $limit = null |
|
| $orderBy = [] |
|
| $groupBy = [] |
|
| $where = [] |
|
array | $opt = [] |
|
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
type | name | summary |
---|---|---|
TableDescriptor|TableGateway|string|null | $table = null |
|
array | $opt = [] |
|
type | summary |
---|---|
AffectBuilder | |
[m] execute
public function execute()
[m] getTable
public function getTable(): ?string
type | summary |
---|---|
?string | |
[m] getAlias
public function getAlias(): ?string
type | summary |
---|---|
?string | |
[m] getConstraint
public function getConstraint(): ?string
type | summary |
---|---|
?string | |
[m] getSet
public function getSet(): array
type | summary |
---|---|
array | |
[m] getMerge
public function getMerge(): array
type | summary |
---|---|
array | |
[m] getColumn
public function getColumn(): array
type | summary |
---|---|
array | |
[m] getSelect
public function getSelect(): ?string
type | summary |
---|---|
?string | |
[m] getValues
public function getValues(): array
type | summary |
---|---|
array | |
[m] getWhere
public function getWhere(): array
type | summary |
---|---|
array | |
[m] getCondition
public function getCondition(): ?ryunosuke\dbml\Query\Clause\Where
type | summary |
---|---|
?Where | |
[m] getGroupBy
public function getGroupBy(): array
type | summary |
---|---|
array | |
[m] getHaving
public function getHaving(): array
type | summary |
---|---|
array | |
[m] getOrderBy
public function getOrderBy(): array
type | summary |
---|---|
array | |
[m] getLimit
public function getLimit(): ?int
type | summary |
---|---|
?int | |
[m] getAutoIncrementSeq
public function getAutoIncrementSeq()
[m] getAffectedRows
public function getAffectedRows()
[m] reset すべてを無に帰す
すべてを無に帰す
public function reset(): ryunosuke\dbml\Query\AffectBuilder
type | summary |
---|---|
AffectBuilder | |
kind | source | summary |
---|---|---|
override | AbstractBuilder::reset() | すべてを無に帰す |
[m] __construct
public function __construct(ryunosuke\dbml\Database $database)
type | name | summary |
---|---|---|
Database | $database |
|
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 もだけど)のでここに定義してある。
type | name | summary |
---|---|---|
array | $tables |
|
array | $predicates |
|
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::_precondition() | WHERE/HAVING 条件を正規化する |
[m] getDatabase
public function getDatabase(): ryunosuke\dbml\Database
type | summary |
---|---|
Database | |
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]
type | name | summary |
---|---|---|
| $data |
|
?array | &$params |
|
type | summary |
---|---|
array|string | |
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")
type | summary |
---|---|
AbstractBuilder | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::prepare() | 現在のビルダの状態で固定して prepare する |
[m] getPreparedStatement prepare したステートメントを返す
prepare したステートメントを返す
public function getPreparedStatement(): ?ryunosuke\dbml\Query\Statement
type | summary |
---|---|
?Statement | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::getPreparedStatement() | prepare したステートメントを返す |
[m] queryInto パラメータを利用してクエリ化
パラメータを利用してクエリ化
public function queryInto(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::queryInto() | パラメータを利用してクエリ化 |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::getQuery() | クエリ文字列を返す |
[m] getParams パラメータを返す
パラメータを返す
public function getParams(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::getParams() | パラメータを返す |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::merge() | パラメータをマージして文字列表現を返す |
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | AbstractBuilder::checkUnknownOption() | |
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
kind | source | summary |
---|---|---|
instead | FactoryTrait::new() | |
[m] getInsertSet
public function getInsertSet(): bool
type | summary |
---|---|
bool | |
[m] setInsertSet
public function setInsertSet(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getUpdateEmpty
public function getUpdateEmpty(): bool
type | summary |
---|---|
bool | |
[m] setUpdateEmpty
public function setUpdateEmpty(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getDefaultInvalidColumn
public function getDefaultInvalidColumn(): array
type | summary |
---|---|
array | |
[m] setDefaultInvalidColumn
public function setDefaultInvalidColumn(mixed $array): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $array |
|
type | summary |
---|---|
AffectBuilder | |
[m] getFilterNoExistsColumn
public function getFilterNoExistsColumn(): bool
type | summary |
---|---|
bool | |
[m] setFilterNoExistsColumn
public function setFilterNoExistsColumn(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getFilterNullAtNotNullColumn
public function getFilterNullAtNotNullColumn(): bool
type | summary |
---|---|
bool | |
[m] setFilterNullAtNotNullColumn
public function setFilterNullAtNotNullColumn(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getConvertEmptyToNull
public function getConvertEmptyToNull(): bool
type | summary |
---|---|
bool | |
[m] setConvertEmptyToNull
public function setConvertEmptyToNull(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getConvertBoolToInt
public function getConvertBoolToInt(): bool
type | summary |
---|---|
bool | |
[m] setConvertBoolToInt
public function setConvertBoolToInt(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getConvertNumericToDatetime
public function getConvertNumericToDatetime(): bool
type | summary |
---|---|
bool | |
[m] setConvertNumericToDatetime
public function setConvertNumericToDatetime(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[m] getConvertArrayToJson
public function getConvertArrayToJson(): null|int
type | summary |
---|---|
null|int | |
[m] setConvertArrayToJson
public function setConvertArrayToJson($json_encode_flags): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
| $json_encode_flags |
|
type | summary |
---|---|
AffectBuilder | |
[m] getConvertObjectToJson
public function getConvertObjectToJson(): null|int
type | summary |
---|---|
null|int | |
[m] setConvertObjectToJson
public function setConvertObjectToJson($json_encode_flags): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
| $json_encode_flags |
|
type | summary |
---|---|
AffectBuilder | |
[m] getTruncateString
public function getTruncateString(): bool
type | summary |
---|---|
bool | |
[m] setTruncateString
public function setTruncateString(mixed $bool): ryunosuke\dbml\Query\AffectBuilder
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
AffectBuilder | |
[I] Queryable クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース
Hierarchy
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
abstract public function getQuery(): string
type | summary |
---|---|
string | |
[m] getParams パラメータを返す
パラメータを返す
abstract public function getParams(): array
type | summary |
---|---|
array | |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
abstract public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
[N] ryunosuke\dbml\Query\Clause\
[C] AbstractClause 抽象共通クラス
抽象共通クラス
現在のところマーカー的利用だけで何の制約も設けていない(インターフェースの方がいいかも)。
Hierarchy
[C] Having HAVING 句クラス
HAVING 句クラス
Hierarchy
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 の演算子は LIKE
や BETWEEN
、 IS 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(); }, ];
type | name | summary |
---|---|---|
Database | $database |
|
array | $predicate |
条件配列 |
?array | &$params = null |
bind 値が格納される |
string | $andor = "OR" |
結合演算子(内部向け引数なので気にしなくて良い) |
?bool | &$filterd = null |
条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い) |
type | summary |
---|---|
array | 条件配列 |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::build() | 条件を正規化する |
[M] and
public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::and() | |
[M] or
public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::or() | |
[m] __construct
public function __construct( string $andor, array $predicate )
type | name | summary |
---|---|---|
string | $andor |
|
array | $predicate |
|
kind | source | summary |
---|---|---|
inherit | AbstractCondition::__construct() | |
[m] __invoke
public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
Database | $database |
|
?bool | &$filtered = null |
|
type | summary |
---|---|
Expression | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::__invoke() | |
[C] AbstractCondition WHERE/HAVING 句の抽象共通クラス
WHERE/HAVING 句の抽象共通クラス
Hierarchy
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 の演算子は LIKE
や BETWEEN
、 IS 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(); }, ];
type | name | summary |
---|---|---|
Database | $database |
|
array | $predicate |
条件配列 |
?array | &$params = null |
bind 値が格納される |
string | $andor = "OR" |
結合演算子(内部向け引数なので気にしなくて良い) |
?bool | &$filterd = null |
条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い) |
type | summary |
---|---|
array | 条件配列 |
[M] and
public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
[M] or
public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
[m] __construct
public function __construct( string $andor, array $predicate )
type | name | summary |
---|---|---|
string | $andor |
|
array | $predicate |
|
[m] __invoke
public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
Database | $database |
|
?bool | &$filtered = null |
|
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
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 )
type | name | summary |
---|---|---|
bool | $rewritable |
|
?bool | $asc = null |
|
?string | $nullsOrder = null |
|
[m] __invoke
public function __invoke(ryunosuke\dbml\Query\SelectBuilder $builder)
type | name | summary |
---|---|---|
SelectBuilder | $builder |
|
[m] isRewritable
public function isRewritable(): bool
type | summary |
---|---|
bool | |
[M] primary 主キーで ORDER BY する
主キーで ORDER BY する
public static function primary(?bool $asc = null): ryunosuke\dbml\Query\Clause\OrderBy
type | name | summary |
---|---|---|
?bool | $asc = null |
|
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');
エラーや例外が出ないので挙動が分かりにくいが、下手にエラーを出すと「攻撃が可能そう」に見えてしまうのでこのような動作にしている。
type | name | summary |
---|---|---|
| $columns |
|
?bool | $asc = null |
|
?string | $nullsOrder = null |
|
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
type | name | summary |
---|---|---|
array | $array |
|
?bool | $asc = null |
|
?string | $nullsOrder = null |
|
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
- 悪い意味で速度のブレが少ない(状態や引数に依存して速くなったりしない)
type | name | summary |
---|---|---|
?int | $seed = null |
|
type | summary |
---|---|
OrderBy | |
[M] randomSuitably 状態や統計に基づいてランダム化する
状態や統計に基づいてランダム化する
public static function randomSuitably(): ryunosuke\dbml\Query\Clause\OrderBy
ただし現状は randomOrder, randomPKMinMax, randomPK のみ(他は癖が強すぎる)。
type | summary |
---|---|
OrderBy | |
[M] randomWhere N/COUNT の確率で WHERE する
N/COUNT の確率で WHERE する
public static function randomWhere(): ryunosuke\dbml\Query\Clause\OrderBy
- pros
- そこそこ速い
- cons
- 指定件数以下になりやすい・等確率でない・1クエリで完結しない・速度が安定しない(速いときは速いが遅いときは遅い)
type | summary |
---|---|
OrderBy | |
[M] randomOffset OFFSET をずらして UNION する
OFFSET をずらして UNION する
public static function randomOffset(): ryunosuke\dbml\Query\Clause\OrderBy
- pros
- それなりに速い
- cons
- 要CTE・クエリが大幅に書き換えられる・1クエリで完結しない・速度が安定しない(速いときは速いが遅いときは遅い)
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に弱い
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クエリで完結しない
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クエリで完結しない
type | summary |
---|---|
OrderBy | |
[C] Select カラムエイリアスを表すクラス
カラムエイリアスを表すクラス
new Alias('alias', 'actual')
を select に与えると "actual AS alias" に展開される。
Hierarchy
type | summary |
---|---|
AbstractClause | 抽象共通クラス |
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');
これらはそれぞれ等価になる。
type | name | summary |
---|---|---|
string | $alias |
|
array | $actuals |
|
type | summary |
---|---|
Select | |
[M] split hoge as fuga を分割する
hoge as fuga を分割する
public static function split( string $string, $defaultAlias = null ): array
type | name | summary |
---|---|---|
string | $string |
|
| $defaultAlias = null |
|
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
変換できなそうならそのまま返す。
type | name | summary |
---|---|---|
string | $alias |
エイリアス名 |
mixed | $actual |
実名 |
string|null | $modifier = null |
$actual の修飾子 |
type | summary |
---|---|
Select|mixed | Alias 化できたら Alias オブジェクト、できなかったら $actual をそのまま返す |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ?string $alias, mixed $actual, ?string $modifier = null, bool $placeholdable = false )
type | name | summary |
---|---|---|
?string | $alias |
|
mixed | $actual |
|
?string | $modifier = null |
|
bool | $placeholdable = false |
|
[m] __toString 文字列表現を返す
文字列表現を返す
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Stringable::__toString() | |
[m] getAlias エイリアス名を返す
エイリアス名を返す
public function getAlias(): ?string
type | summary |
---|---|
?string | |
[m] getActual 実部名を返す
実部名を返す
public function getActual()
[m] getModifier 修飾子を返す
修飾子を返す
public function getModifier(): ?string
type | summary |
---|---|
?string | |
[m] isPlaceholdable 自動で伏せるべきか
自動で伏せるべきか
public function isPlaceholdable(): bool
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
type | summary |
---|---|
AbstractClause | 抽象共通クラス |
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();
これらはそれぞれ等価になる
type | name | summary |
---|---|---|
string | $expr |
|
array | $arguments |
|
type | summary |
---|---|
SelectOption | |
[m] __construct コンストラクタ
コンストラクタ
public function __construct(string $expr)
valid な文字列かどうかのチェックは行わないので、 SelectOption::DISTINCT のような定数を与えてもよいし、固定文字列を与えても良い。
type | name | summary |
---|---|---|
string | $expr |
|
[m] __toString 文字列表現を返す
文字列表現を返す
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Stringable::__toString() | |
[M] DISTINCT
public static function DISTINCT(): ryunosuke\dbml\Query\Clause\SelectOption
type | summary |
---|---|
SelectOption | |
[M] SQL_CACHE
public static function SQL_CACHE(): ryunosuke\dbml\Query\Clause\SelectOption
type | summary |
---|---|
SelectOption | |
[M] SQL_NO_CACHE
public static function SQL_NO_CACHE(): ryunosuke\dbml\Query\Clause\SelectOption
type | summary |
---|---|
SelectOption | |
[M] SQL_CALC_FOUND_ROWS
public static function SQL_CALC_FOUND_ROWS(): ryunosuke\dbml\Query\Clause\SelectOption
type | summary |
---|---|
SelectOption | |
[M] STRAIGHT_JOIN
public static function STRAIGHT_JOIN(): ryunosuke\dbml\Query\Clause\SelectOption
type | summary |
---|---|
SelectOption | |
[C] Where WHERE 句クラス
WHERE 句クラス
Hierarchy
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 の演算子は LIKE
や BETWEEN
、 IS 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(); }, ];
type | name | summary |
---|---|---|
Database | $database |
|
array | $predicate |
条件配列 |
?array | &$params = null |
bind 値が格納される |
string | $andor = "OR" |
結合演算子(内部向け引数なので気にしなくて良い) |
?bool | &$filterd = null |
条件が全て ! などでフィルタされたら true が格納される(内部向け引数なので気にしなくて良い) |
type | summary |
---|---|
array | 条件配列 |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::build() | 条件を正規化する |
[M] and
public static function and(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::and() | |
[M] or
public static function or(array $predicate): ryunosuke\dbml\Query\Clause\AbstractCondition
type | name | summary |
---|---|---|
array | $predicate |
|
type | summary |
---|---|
AbstractCondition | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::or() | |
[m] __construct
public function __construct( string $andor, array $predicate )
type | name | summary |
---|---|---|
string | $andor |
|
array | $predicate |
|
kind | source | summary |
---|---|---|
inherit | AbstractCondition::__construct() | |
[m] __invoke
public function __invoke( ryunosuke\dbml\Database $database, ?bool &$filtered = null ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
Database | $database |
|
?bool | &$filtered = null |
|
type | summary |
---|---|
Expression | |
kind | source | summary |
---|---|---|
inherit | AbstractCondition::__invoke() | |
[N] ryunosuke\dbml\Query\Expression\
[C] Expression 生クエリを表すクラス
生クエリを表すクラス
Expression::new('NOW()')
を select に与えると "NOW()" に展開される(エスケープやサブクエリ化などの余計なことを一切行わない)。
Hierarchy
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
Stringable | |
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
type | name | summary |
---|---|---|
null|string|Queryable | $expr |
対象カラム。null 指定時は CASE WHEN 構文になる |
array | $whens |
[条件 => 値]の配列 |
mixed | $else = null |
else 句。未指定時は else 句なし |
type | summary |
---|---|
Expression|Expression | CASE ~ END 構文の Expression インスタンス |
[M] over OVER 句を生成する
OVER 句を生成する
public static function over( $partitionBy = [], $orderBy = [], $frame = null ): ryunosuke\dbml\Query\Expression\Expression
type | name | summary |
---|---|---|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
type | summary |
---|---|
Expression | |
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
type | name | summary |
---|---|---|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
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"
type | name | summary |
---|---|---|
mixed | $expr |
|
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);
はそれぞれ等価になる。
type | name | summary |
---|---|---|
string | $expr |
|
array | $params |
|
type | summary |
---|---|
Expression | |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ?string $expr, mixed $params = [] )
type | name | summary |
---|---|---|
?string | $expr |
|
mixed | $params = [] |
|
[m] __toString 文字列表現を返す
文字列表現を返す
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Stringable::__toString() | |
[m] setParams
public function setParams(array $params)
type | name | summary |
---|---|---|
array | $params |
|
[m] getParams パラメータを返す
パラメータを返す
public function getParams(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
implement | Queryable::getParams() | パラメータを返す |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::getQuery() | クエリ文字列を返す |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Queryable::merge() | パラメータをマージして文字列表現を返す |
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
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
type | summary |
---|---|
Expression | 生クエリを表すクラス |
type | summary |
---|---|
Queryable | クエリ文字列(完全性は問わない。部分クエリでも良い)とパラメータを持つインターフェース |
Stringable | |
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
[p] $params
[M] define 演算子を定義する
演算子を定義する
public static function define( string $operator, ?callable $callback )
設定値として「カラム, 値を受け取り、[式 => パラメータ] を返すクロージャ」を与えなければならない。 (クラス冒頭のサンプルを参照)。
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() で演算子を指定せずシンプルな条件指定が出来るようになる(クラス冒頭を参照)。
type | name | summary |
---|---|---|
string | $operator |
|
array | $operands |
|
type | summary |
---|---|
Operator | |
kind | source | summary |
---|---|---|
override | Expression::__callStatic() | インスタンスを返す |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ?ryunosuke\dbml\Metadata\CompatiblePlatform $platform, string $operator, ?string $operand1, $operand2 )
type | name | summary |
---|---|---|
?CompatiblePlatform | $platform |
|
string | $operator |
|
?string | $operand1 |
|
| $operand2 |
|
kind | source | summary |
---|---|---|
override | Expression::__construct() | コンストラクタ |
[m] __toString 文字列表現を返す
文字列表現を返す
public function __toString(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
implement | Stringable::__toString() | |
[m] not 否定する
否定する
public function not(): ryunosuke\dbml\Query\Expression\Operator
type | summary |
---|---|
Operator | |
[m] lazy callStatic で作成したインスタンスを後初期化する
callStatic で作成したインスタンスを後初期化する
public function lazy( ?string $operand1, ?ryunosuke\dbml\Metadata\CompatiblePlatform $platform = null ): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
?string | $operand1 |
|
?CompatiblePlatform | $platform = null |
|
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
type | name | summary |
---|---|---|
null|string|Queryable | $expr |
対象カラム。null 指定時は CASE WHEN 構文になる |
array | $whens |
[条件 => 値]の配列 |
mixed | $else = null |
else 句。未指定時は else 句なし |
type | summary |
---|---|
Expression|Expression | CASE ~ END 構文の Expression インスタンス |
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
type | name | summary |
---|---|---|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
type | summary |
---|---|
Expression | |
kind | source | summary |
---|---|---|
inherit | Expression::over() | OVER 句を生成する |
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
type | name | summary |
---|---|---|
| $partitionBy = [] |
|
| $orderBy = [] |
|
| $frame = null |
|
type | summary |
---|---|
Expression | |
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"
type | name | summary |
---|---|---|
mixed | $expr |
|
type | summary |
---|---|
mixed | |
kind | source | summary |
---|---|---|
inherit | Expression::forge() | 値を Expression 化して返す |
[m] setParams
public function setParams(array $params)
type | name | summary |
---|---|---|
array | $params |
|
kind | source | summary |
---|---|---|
inherit | Expression::setParams() | |
[m] getParams パラメータを返す
パラメータを返す
public function getParams(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
inherit | Expression::getParams() | パラメータを返す |
[m] getQuery クエリ文字列を返す
クエリ文字列を返す
public function getQuery(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Expression::getQuery() | クエリ文字列を返す |
[m] merge パラメータをマージして文字列表現を返す
パラメータをマージして文字列表現を返す
public function merge(?array &$params): string
クエリ文字列を返し、引数配列にパラメータが追加される
type | name | summary |
---|---|---|
?array | &$params |
|
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | Expression::merge() | パラメータをマージして文字列表現を返す |
[M] insteadof
public static function insteadof(?string $classname = null)
type | name | summary |
---|---|---|
?string | $classname = null |
|
kind | source | summary |
---|---|---|
instead | FactoryTrait::insteadof() | |
[M] new
public static function new(...$arguments): ryunosuke\dbml\Mixin\FactoryTrait
type | name | summary |
---|---|---|
| ...$arguments |
|
type | summary |
---|---|
FactoryTrait | |
kind | source | summary |
---|---|---|
instead | FactoryTrait::new() | |
[M] is 値に応じてよしなに等価比較
値に応じてよしなに等価比較
public static function is(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$args |
|
type | summary |
---|---|
Operator | |
[M] equal = 演算子
= 演算子
public static function equal(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] spaceship <=> 演算子
<=> 演算子
public static function spaceship(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] in IN 演算子
IN 演算子
public static function in(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$args |
|
type | summary |
---|---|
Operator | |
[M] nullIn NULL 許容 IN 演算子
NULL 許容 IN 演算子
public static function nullIn(mixed ...$args): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$args |
|
type | summary |
---|---|
Operator | |
[M] lt < 演算子
< 演算子
public static function lt(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] lte <= 演算子
<= 演算子
public static function lte(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] gt > 演算子
> 演算子
public static function gt(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] gte >= 演算子
>= 演算子
public static function gte(mixed $value): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $value |
|
type | summary |
---|---|
Operator | |
[M] between BETWEEN 演算子
BETWEEN 演算子
public static function between( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $min |
|
mixed | $max |
|
type | summary |
---|---|
Operator | |
[M] range (~) 演算子
(~) 演算子
public static function range( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $min |
|
mixed | $max |
|
type | summary |
---|---|
Operator | |
[M] rangeLte [~) 演算子
[~) 演算子
public static function rangeLte( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $min |
|
mixed | $max |
|
type | summary |
---|---|
Operator | |
[M] rangeGte (~] 演算子
(~] 演算子
public static function rangeGte( mixed $min, mixed $max ): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $min |
|
mixed | $max |
|
type | summary |
---|---|
Operator | |
[M] like LIKE 演算子
LIKE 演算子
public static function like(mixed $word): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $word |
|
type | summary |
---|---|
Operator | |
[M] likeLeft %LIKE 演算子
%LIKE 演算子
public static function likeLeft(mixed $word): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $word |
|
type | summary |
---|---|
Operator | |
[M] likeRight LIKE% 演算子
LIKE% 演算子
public static function likeRight(mixed $word): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $word |
|
type | summary |
---|---|
Operator | |
[M] likeIn LIKEIN 演算子
LIKEIN 演算子
public static function likeIn(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$words |
|
type | summary |
---|---|
Operator | |
[M] likeInLeft %LIKEIN 演算子
%LIKEIN 演算子
public static function likeInLeft(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$words |
|
type | summary |
---|---|
Operator | |
[M] likeInRight LIKEIN% 演算子
LIKEIN% 演算子
public static function likeInRight(mixed ...$words): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | ...$words |
|
type | summary |
---|---|
Operator | |
[M] phrase フレーズ演算子
フレーズ演算子
public static function phrase(mixed $phrase): ryunosuke\dbml\Query\Expression\Operator
type | name | summary |
---|---|---|
mixed | $phrase |
|
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); }
type | summary |
---|---|
IteratorAggregate | |
Countable | |
Traversable | |
type | summary |
---|---|
IteratorTrait | イテレータ(主に結果セット)を利用しやすくするための trait |
[m] __construct コンストラクタ
コンストラクタ
public function __construct(ryunosuke\dbml\Query\SelectBuilder $builder)
type | name | summary |
---|---|---|
SelectBuilder | $builder |
|
[m] paginate 現在ページとページ内アイテム数を設定する
現在ページとページ内アイテム数を設定する
public function paginate( int $currentpage, int $countperpage ): ryunosuke\dbml\Query\Pagination\Paginator
type | name | summary |
---|---|---|
int | $currentpage |
|
int | $countperpage |
|
type | summary |
---|---|
Paginator | |
[m] getItems 現在アイテムを取得する
現在アイテムを取得する
public function getItems(): array
type | summary |
---|---|
array | |
[m] getPage 現在ページを返す
現在ページを返す
public function getPage(): int
type | summary |
---|---|
int | |
[m] getFirst 最初のインデックスを返す
最初のインデックスを返す
public function getFirst(): ?int
総数が0の時はnullを返す
type | summary |
---|---|
?int | |
[m] getLast 最後のインデックスを返す
最後のインデックスを返す
public function getLast(): ?int
総数が0の時はnullを返す
type | summary |
---|---|
?int | |
[m] getTotal 全アイテム数を返す
全アイテム数を返す
public function getTotal(): int
type | summary |
---|---|
int | |
[m] getPageRange 表示ページを配列で返す
表示ページを配列で返す
public function getPageRange(?int $shownPage = null): array
$shownPage 表示するページ数。奇数が望ましい。省略時全ページ表示。
type | name | summary |
---|---|---|
?int | $shownPage = null |
|
type | summary |
---|---|
array | |
[m] getPageCount 全ページ数を返す
全ページ数を返す
public function getPageCount(): int
type | summary |
---|---|
int | |
[m] hasPrev 前ページが存在するかを返す
前ページが存在するかを返す
public function hasPrev(): bool
type | summary |
---|---|
bool | |
[m] hasNext 次ページが存在するかを返す
次ページが存在するかを返す
public function hasNext(): bool
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); }
type | summary |
---|---|
IteratorAggregate | |
Countable | |
Traversable | |
type | summary |
---|---|
IteratorTrait | イテレータ(主に結果セット)を利用しやすくするための trait |
[m] __construct コンストラクタ
コンストラクタ
public function __construct(ryunosuke\dbml\Query\SelectBuilder $builder)
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 だろうから負数だったりタプルだったりは考慮しないことにする)。 もっとも大抵は主キー、あるいはインデックスカラムでほぼ固定だろう。
type | name | summary |
---|---|---|
array | $condition |
|
int | $count |
|
bool | $orderbyasc = true |
|
type | summary |
---|---|
Sequencer | |
[m] getItems 現在アイテムを取得する
現在アイテムを取得する
public function getItems(): array
type | summary |
---|---|
array | |
[m] hasMore 次アイテムが存在するかを返す
次アイテムが存在するかを返す
public function hasMore(): bool
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
- begin
-
main が例外を投げるが、リトライはされない例
- begin
- main(throw)
- rollback
- fail
- catch
- finish
- begin
-
main が例外を投げるが、リトライで成功する例
- begin
- main(throw)
- rollback
- fail
- retry
- begin
- main
- commit
- done
- finish
- begin
-
main が例外を投げて、リトライでも失敗する例
- begin
- main(throw)
- rollback
- fail
- retry
- begin
- main(throw)
- rollback
- fail
- catch
- finish
- begin
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
[p] $logger ロガーインスタンス
[p] $begin begin イベント配列
[p] $commit commit イベント配列
[p] $rollback rollback イベント配列
[p] $main main イベント配列
[p] $done done イベント配列
[p] $fail fail イベント配列
[p] $retry retry イベント配列
[p] $catch catch イベント配列
[p] $finish finish イベント配列
[p] $retryable リトライ判定処理
[M] getDefaultOptions オプションのデフォルト値を返す static メソッド
オプションのデフォルト値を返す static メソッド
public static function getDefaultOptions(): array
このメソッドの返り値が構成要素とデフォルト値を担っていて、その配列以外のキーは基本的に保持できない。
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
override | OptionTrait::getDefaultOptions() | オプションのデフォルト値を返す static メソッド |
[m] __construct コンストラクタ
コンストラクタ
public function __construct( ryunosuke\dbml\Database $database, array $options = [] )
type | name | summary |
---|---|---|
Database | $database |
|
array | $options = [] |
|
[m] __get
public function __get(string $name): mixed
type | name | summary |
---|---|---|
string | $name |
|
type | summary |
---|---|
mixed | |
[m] __set
public function __set( string $name, mixed $value )
type | name | summary |
---|---|---|
string | $name |
|
mixed | $value |
|
[m] __call
public function __call( string $name, array $arguments ): mixed
type | name | summary |
---|---|---|
string | $name |
|
array | $arguments |
|
type | summary |
---|---|
mixed | |
[m] __invoke
public function __invoke(bool $throwable)
type | name | summary |
---|---|---|
bool | $throwable |
|
[m] begin begin イベントを設定する
begin イベントを設定する
public function begin( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setBegin begin イベント配列を設定する
begin イベント配列を設定する
public function setBegin(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getBegin begin イベント配列を取得する
[m] commit commit イベントを設定する
commit イベントを設定する
public function commit( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setCommit commit イベント配列を設定する
commit イベント配列を設定する
public function setCommit(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getCommit commit イベント配列を取得する
[m] rollback rollback イベントを設定する
rollback イベントを設定する
public function rollback( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setRollback rollback イベント配列を設定する
rollback イベント配列を設定する
public function setRollback(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getRollback rollback イベント配列を取得する
[m] main main イベントを設定する
main イベントを設定する
public function main( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setMain main イベント配列を設定する
main イベント配列を設定する
public function setMain(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getMain main イベント配列を取得する
[m] done done イベントを設定する
done イベントを設定する
public function done( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setDone done イベント配列を設定する
done イベント配列を設定する
public function setDone(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getDone done イベント配列を取得する
[m] fail fail イベントを設定する
fail イベントを設定する
public function fail( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setFail fail イベント配列を設定する
fail イベント配列を設定する
public function setFail(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getFail fail イベント配列を取得する
[m] retry retry イベントを設定する
retry イベントを設定する
public function retry( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setRetry retry イベント配列を設定する
retry イベント配列を設定する
public function setRetry(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getRetry retry イベント配列を取得する
[m] catch catch イベントを設定する
catch イベントを設定する
public function catch( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setCatch catch イベント配列を設定する
catch イベント配列を設定する
public function setCatch(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getCatch catch イベント配列を取得する
[m] finish finish イベントを設定する
finish イベントを設定する
public function finish( $callback, $key = null ): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
| $callback |
|
| $key = null |
|
type | summary |
---|---|
Transaction | |
[m] setFinish finish イベント配列を設定する
finish イベント配列を設定する
public function setFinish(array $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
array | $closure |
|
type | summary |
---|---|
Transaction | |
[m] getFinish finish イベント配列を取得する
[m] master トランザクションをマスター接続で実行するようにする
トランザクションをマスター接続で実行するようにする
public function master(): ryunosuke\dbml\Transaction\Transaction
type | summary |
---|---|
Transaction | |
[m] slave トランザクションをスレーブ接続で実行するようにする
トランザクションをスレーブ接続で実行するようにする
public function slave(): ryunosuke\dbml\Transaction\Transaction
type | summary |
---|---|
Transaction | |
[m] perform トランザクションとして実行する
トランザクションとして実行する
public function perform(bool $throwable = true)
$throwable は catch で代替可能なので近い将来削除される。
type | name | summary |
---|---|---|
bool | $throwable = true |
|
[m] preview トランザクションとして実行後、強制的に rollback する
トランザクションとして実行後、強制的に rollback する
public function preview(?array &$queries = [])
一連の実行クエリが得られるが、あくまでDBレイヤーのトランザクションなので、 php的にファイルを変更したり、何かを送信したりしてもそれは戻らない。
type | name | summary |
---|---|---|
?array | &$queries = [] |
|
[m] __debugInfo
public function __debugInfo(): array
type | summary |
---|---|
array | |
kind | source | summary |
---|---|---|
instead | DebugInfoTrait::__debugInfo() | |
[m] checkUnknownOption
public function checkUnknownOption(array $options): bool
type | name | summary |
---|---|---|
array | $options |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
instead | OptionTrait::checkUnknownOption() | |
[m] isolationLevel トランザクション分離レベルを設定・取得する
トランザクション分離レベルを設定・取得する
public function isolationLevel(mixed $int = null): ryunosuke\dbml\Transaction\Transaction|int
type | name | summary |
---|---|---|
mixed | $int = null |
|
type | summary |
---|---|
Transaction|int | |
[m] getIsolationLevel トランザクション分離レベルを取得する
トランザクション分離レベルを取得する
public function getIsolationLevel(): int
type | summary |
---|---|
int | |
[m] setIsolationLevel トランザクション分離レベルを設定する
トランザクション分離レベルを設定する
public function setIsolationLevel(mixed $int): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
mixed | $int |
|
type | summary |
---|---|
Transaction | |
[m] getCheckImplicit 暗黙コミット/ロールバックを検出するかを取得する
暗黙コミット/ロールバックを検出するかを取得する
public function getCheckImplicit(): bool
type | summary |
---|---|
bool | |
[m] setCheckImplicit 暗黙コミット/ロールバックを検出するかを設定する
暗黙コミット/ロールバックを検出するかを設定する
public function setCheckImplicit(mixed $bool): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
mixed | $bool |
|
type | summary |
---|---|
Transaction | |
[m] logger ロガーインスタンスを設定・取得する
ロガーインスタンスを設定・取得する
public function logger(Psr\Log\LoggerInterface $logger = null): ryunosuke\dbml\Transaction\Transaction|int
type | name | summary |
---|---|---|
LoggerInterface | $logger = null |
|
type | summary |
---|---|
Transaction|int | |
[m] getLogger ロガーインスタンスを取得する
ロガーインスタンスを取得する
public function getLogger(): Psr\Log\LoggerInterface
type | summary |
---|---|
LoggerInterface | |
[m] setLogger ロガーインスタンスを設定する
ロガーインスタンスを設定する
public function setLogger(Psr\Log\LoggerInterface $logger): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
LoggerInterface | $logger |
|
type | summary |
---|---|
Transaction | |
[m] retryable リトライ判定処理を設定・取得する
リトライ判定処理を設定・取得する
public function retryable(mixed $closure = null): ryunosuke\dbml\Transaction\Transaction|\Closure
type | name | summary |
---|---|---|
mixed | $closure = null |
|
type | summary |
---|---|
Transaction|Closure | |
[m] getRetryable リトライ判定処理を取得する
[m] setRetryable リトライ判定処理を設定する
リトライ判定処理を設定する
public function setRetryable(\Closure $closure): ryunosuke\dbml\Transaction\Transaction
type | name | summary |
---|---|---|
Closure | $closure |
|
type | summary |
---|---|
Transaction | |
[N] ryunosuke\dbml\Types\
[C] EnumType php の enum と db の型を紐づけるクラス
php の enum と db の型を紐づけるクラス
他の型のように個別クラスで扱うのではなく、インスタンス単位で扱う。 ちなみに DB 側のいわゆる ENUM 型は一切関係ない(別に使っても良いが)。
register しておけば select/affect 時に自動で enum との変換が行われるようになる。
Hierarchy
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, ]);
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
array | $typeMap |
|
bool | $throw = true |
重複登録で例外を投げるか?(基本的にテスト・デバッグ目的であり明示指定は非推奨) |
type | summary |
---|---|
array|EnumType[] | 登録した Type オブジェクトを返すが特に用途はない(getTypeRegistry 経由で取得可能) |
[m] getName Gets the name of this type.
Gets the name of this type.
public function getName(): string
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
override | Type::getName() | Gets the name of this type. |
[m] getEnum
public function getEnum(): string
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.
type | name | summary |
---|---|---|
mixed | $value |
The value to convert. |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
mixed | |
type | summary |
---|---|
ConversionException | |
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.
type | name | summary |
---|---|---|
mixed | $value |
The value to convert. |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
?BackedEnum | |
type | summary |
---|---|
ConversionException | |
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
type | name | summary |
---|---|---|
array|mixed[] | $column |
The column definition |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
string | |
kind | source | summary |
---|---|---|
inherit | AbstractType::getSQLDeclaration() | Gets the SQL declaration snippet for a column of this type. |
[m] __construct
final public function __construct()
kind | source | summary |
---|---|---|
inherit | Type::__construct() | |
type | summary |
---|---|
Type::addType() | |
[M] getTypeRegistry
final public static function getTypeRegistry(): Doctrine\DBAL\Types\TypeRegistry
type | summary |
---|---|
TypeRegistry | |
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.
type | name | summary |
---|---|---|
string | $name |
The name of the type (as returned by getName()). |
type | summary |
---|---|
Type | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
Type | $type |
|
type | summary |
---|---|
string | |
type | summary |
---|---|
Exception | |
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
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. |
type | summary |
---|---|
void | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
string | $name |
The name of the type. |
type | summary |
---|---|
bool | TRUE if type is supported; FALSE otherwise. |
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
type | name | summary |
---|---|---|
string | $name |
|
class-string | $className |
|
type | summary |
---|---|
void | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Type::getBindingType() | Gets the (preferred) binding type for values of this type that |
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
type | summary |
---|---|
array | string> |
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.
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | Type::canRequireSQLConversion() | Does working with this column require SQL conversion functions? |
type | summary |
---|---|
convertToDatabaseValueSQL | |
convertToPHPValueSQL | |
convertToDatabaseValueSQL | |
convertToPHPValueSQL | |
[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
type | name | summary |
---|---|---|
string | $sqlExpr |
|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string | |
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
type | name | summary |
---|---|---|
string | $sqlExpr |
|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string | |
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[]
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string[] | |
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.
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | Type::requiresSQLCommentHint() | If this Doctrine Type maps to an already mapped database type, |
[C] AbstractType
Hierarchy
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
type | name | summary |
---|---|---|
array|mixed[] | $column |
The column definition |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
string | |
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
type | summary |
---|---|
string | |
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.
type | name | summary |
---|---|---|
mixed | $value |
The value to convert. |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
mixed | |
type | summary |
---|---|
ConversionException | |
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.
アノテーション出力のため、返り値の型は指定するのが望ましい。
type | name | summary |
---|---|---|
mixed | $value |
The value to convert. |
AbstractPlatform | $platform |
The currently used database platform. |
type | summary |
---|---|
mixed | |
type | summary |
---|---|
ConversionException | |
kind | source | summary |
---|---|---|
override | Type::convertToPHPValue() | Converts a value from its database representation to its PHP representation |
[m] __construct
final public function __construct()
kind | source | summary |
---|---|---|
inherit | Type::__construct() | |
type | summary |
---|---|
Type::addType() | |
[M] getTypeRegistry
final public static function getTypeRegistry(): Doctrine\DBAL\Types\TypeRegistry
type | summary |
---|---|
TypeRegistry | |
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.
type | name | summary |
---|---|---|
string | $name |
The name of the type (as returned by getName()). |
type | summary |
---|---|
Type | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
Type | $type |
|
type | summary |
---|---|
string | |
type | summary |
---|---|
Exception | |
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
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. |
type | summary |
---|---|
void | |
type | summary |
---|---|
Exception | |
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
type | name | summary |
---|---|---|
string | $name |
The name of the type. |
type | summary |
---|---|
bool | TRUE if type is supported; FALSE otherwise. |
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
type | name | summary |
---|---|---|
string | $name |
|
class-string | $className |
|
type | summary |
---|---|
void | |
type | summary |
---|---|
Exception | |
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.
type | summary |
---|---|
int | |
kind | source | summary |
---|---|---|
inherit | Type::getBindingType() | Gets the (preferred) binding type for values of this type that |
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
type | summary |
---|---|
array | string> |
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.
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | Type::canRequireSQLConversion() | Does working with this column require SQL conversion functions? |
type | summary |
---|---|
convertToDatabaseValueSQL | |
convertToPHPValueSQL | |
convertToDatabaseValueSQL | |
convertToPHPValueSQL | |
[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
type | name | summary |
---|---|---|
string | $sqlExpr |
|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string | |
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
type | name | summary |
---|---|---|
string | $sqlExpr |
|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string | |
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[]
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
type | summary |
---|---|
string[] | |
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.
type | name | summary |
---|---|---|
AbstractPlatform | $platform |
|
type | summary |
---|---|
bool | |
kind | source | summary |
---|---|---|
inherit | Type::requiresSQLCommentHint() | If this Doctrine Type maps to an already mapped database type, |