NaifyDb\QueryBuilder\OrderBuilder クラス
ORDER BY 句ビルダー
ソート対象のカラムと方向だけを保持し、ORDER BY 句へ変換する。
QueryBuilder の内部部品だが、単体で順序句だけ必要な場面でも使える。
カラム名・テーブル名・SQL式は自動エスケープ・クオート・存在確認しない。 外部入力から指定を選ぶ場合は、呼び出し側の許可リストで固定のSQL指定へ対応付ける。 実カラム名の存在確認には、必要に応じてConnection::describeTable()とTableSchema::hasColumn()を使う。 SQL式や別名の解析、使用を許可するカラムの選別は呼び出し側で行う。
使用例
$order = (new OrderBuilder())
->orderBy('created_at', 'DESC')
->orderBy('id', 'ASC');
$sql = $order->build();
// " ORDER BY created_at DESC, id ASC"
設計意図
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
プロパティ
| 名前 | 型 | 説明 |
|---|---|---|
private
$orders
|
array |
追加順の ORDER BY 要素 |
メソッド
| メソッド | 説明 |
|---|---|
public
orderBy(string $column, string $direction = ASC): static
|
ソート順を追加する
カラム指定は自動エスケープ・存在確認しない。式や別名の意味を変えないため、自動クオートもしない。
外部入力は直接渡さず、許可リストで固定の指定へ対応付ける。実カラム名の存在確認が必要な場合は、
Connection::describeTable()で取得したTableSchema::hasColumn()を使う。SQL式や別名の安全性は判定しない。
|
public
build(): string
|
ORDER BY 句を組み立てる |