1 フォロワー

クラス yii\db\QueryBuilder

継承yii\db\QueryBuilder » yii\base\BaseObject
実装yii\base\Configurable
サブクラスyii\db\cubrid\QueryBuilder, yii\db\mssql\QueryBuilder, yii\db\mysql\QueryBuilder, yii\db\oci\QueryBuilder, yii\db\pgsql\QueryBuilder, yii\db\sqlite\QueryBuilder
利用可能バージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/db/QueryBuilder.php

QueryBuilder は、yii\db\Query オブジェクトとして与えられた仕様に基づいて SELECT SQL ステートメントを構築します。

SQL ステートメントは、yii\db\Query オブジェクトから build() メソッドを使用して作成されます。

QueryBuilder は、INSERT、UPDATE、DELETE、CREATE TABLE などの SQL ステートメントを構築するために yii\db\Command によっても使用されます。

QueryBuilder の詳細と使用方法については、クエリビルダーに関するガイド記事をご覧ください。

パブリックプロパティ

継承されたプロパティを非表示

プロパティ 説明 定義元
$conditionBuilders 配列 クエリ条件とビルダーメソッドのマップ。 yii\db\QueryBuilder
$conditionClasses 配列 条件エイリアスと条件クラスのマップ。 yii\db\QueryBuilder
$db yii\db\Connection データベース接続。 yii\db\QueryBuilder
$expressionBuilders 文字列[]|yii\db\ExpressionBuilderInterface[] 式クラスを式ビルダー クラスにマッピングします。 yii\db\QueryBuilder
$separator 文字列 SQL ステートメントの異なるフラグメント間の区切り文字。 yii\db\QueryBuilder
$typeMap 配列 抽象的なカラム型が物理的なカラム型にマップされます。 yii\db\QueryBuilder

保護されたプロパティ

継承されたプロパティを非表示

プロパティ 説明 定義元

パブリックメソッド

継承されたメソッドを非表示

メソッド 説明 定義元
__call() クラスメソッドではない名前付きメソッドを呼び出します。 yii\base\BaseObject
__construct() コンストラクタ。 yii\db\QueryBuilder
__get() オブジェクトプロパティの値を返します。 yii\base\BaseObject
__isset() プロパティが設定されているか、つまり定義されていて null でないかを確認します。 yii\base\BaseObject
__set() オブジェクトプロパティの値を設定します。 yii\base\BaseObject
__unset() オブジェクトプロパティを null に設定します。 yii\base\BaseObject
addCheck() 既存のテーブルにチェック制約を追加するための SQL コマンドを作成します。 yii\db\QueryBuilder
addColumn() 新しい DB カラムを追加するための SQL ステートメントを構築します。 yii\db\QueryBuilder
addCommentOnColumn() カラムにコメントを追加するための SQL コマンドを構築します。 yii\db\QueryBuilder
addCommentOnTable() テーブルにコメントを追加するための SQL コマンドを構築します。 yii\db\QueryBuilder
addDefaultValue() 既存のテーブルにデフォルト値制約を追加するための SQL コマンドを作成します。 yii\db\QueryBuilder
addForeignKey() 既存のテーブルに外部キー制約を追加するための SQL ステートメントを構築します。 yii\db\QueryBuilder
addPrimaryKey() 既存のテーブルにプライマリキー制約を追加するための SQL ステートメントを構築します。 yii\db\QueryBuilder
addUnique() 既存のテーブルに一意制約を追加するための SQL コマンドを作成します。 yii\db\QueryBuilder
alterColumn() カラムの定義を変更するための SQL ステートメントを構築します。 yii\db\QueryBuilder
batchInsert() バッチ INSERT SQL ステートメントを生成します。 yii\db\QueryBuilder
bindParam() PARAM_PREFIX を使用して、$value を $params 配列に追加するヘルパーメソッド。 yii\db\QueryBuilder
build() yii\db\Query オブジェクトから SELECT SQL ステートメントを生成します。 yii\db\QueryBuilder
buildAndCondition() 2 つ以上の SQL 式を AND または OR 演算子で接続します。 yii\db\QueryBuilder
buildBetweenCondition() BETWEEN 演算子を使用した SQL 式を作成します。 yii\db\QueryBuilder
buildColumns() カラムを処理し、必要に応じて適切にクォートします。 yii\db\QueryBuilder
buildCondition() 条件の仕様を解析し、対応する SQL 式を生成します。 yii\db\QueryBuilder
buildExistsCondition() EXISTS 演算子を使用した SQL 式を作成します。 yii\db\QueryBuilder
buildExpression() 指定された $expression を構築します yii\db\QueryBuilder
buildFrom() yii\db\QueryBuilder
buildGroupBy() yii\db\QueryBuilder
buildHashCondition() カラムと値のペアに基づいて条件を作成します。 yii\db\QueryBuilder
buildHaving() yii\db\QueryBuilder
buildInCondition() IN 演算子を使用した SQL 式を作成します。 yii\db\QueryBuilder
buildJoin() yii\db\QueryBuilder
buildLikeCondition() LIKE 演算子を使用した SQL 式を作成します。 yii\db\QueryBuilder
buildLimit() yii\db\QueryBuilder
buildNotCondition() NOT 演算子で SQL 式を反転させます。 yii\db\QueryBuilder
buildOrderBy() yii\db\QueryBuilder
buildOrderByAndLimit() ORDER BY および LIMIT/OFFSET 句を構築し、指定された SQL に付加します。 yii\db\QueryBuilder
buildSelect() yii\db\QueryBuilder
buildSimpleCondition() "column" 演算子 value のような SQL 式を作成します。 yii\db\QueryBuilder
buildUnion() yii\db\QueryBuilder
buildWhere() yii\db\QueryBuilder
buildWithQueries() yii\db\QueryBuilder
canGetProperty() プロパティが読み取り可能かどうかを示す値を返します。 yii\base\BaseObject
canSetProperty() プロパティが設定可能かどうかを示す値を返します。 yii\base\BaseObject
checkIntegrity() 整合性チェックを有効または無効にするための SQL ステートメントを構築します。 yii\db\QueryBuilder
className() このクラスの完全修飾名を返します。 yii\base\BaseObject
createConditionFromArray() yii\db\Query::where() で説明されているように、配列形式で定義された $condition を $conditionClasses マップに従って yii\db\condition\ConditionInterface のインスタンスに変換します。 yii\db\QueryBuilder
createIndex() 新しいインデックスを作成するための SQL ステートメントを構築します。 yii\db\QueryBuilder
createTable() 新しい DB テーブルを作成するための SQL ステートメントを構築します。 yii\db\QueryBuilder
createView() SQL ビューを作成します。 yii\db\QueryBuilder
delete() DELETE SQL ステートメントを作成します。 yii\db\QueryBuilder
dropCheck() チェック制約を削除するための SQL コマンドを作成します。 yii\db\QueryBuilder
dropColumn() DB カラムを削除するための SQL ステートメントを構築します。 yii\db\QueryBuilder
dropCommentFromColumn() カラムにコメントを追加するための SQL コマンドを構築します。 yii\db\QueryBuilder
dropCommentFromTable() テーブルにコメントを追加するための SQL コマンドを構築します。 yii\db\QueryBuilder
dropDefaultValue() デフォルト値制約を削除するための SQL コマンドを作成します。 yii\db\QueryBuilder
dropForeignKey() 外部キー制約を削除するための SQL ステートメントを構築します。 yii\db\QueryBuilder
dropIndex() インデックスを削除するための SQL ステートメントを構築します。 yii\db\QueryBuilder
dropPrimaryKey() 既存のテーブルからプライマリキー制約を削除するための SQL ステートメントを構築します。 yii\db\QueryBuilder
dropTable() DB テーブルを削除するための SQL ステートメントを構築します。 yii\db\QueryBuilder
dropUnique() 一意制約を削除するための SQL コマンドを作成します。 yii\db\QueryBuilder
dropView() SQL ビューを削除します。 yii\db\QueryBuilder
executeResetSequence() テーブルの主キーのシーケンス値をリセットするSQLステートメントを実行します。 yii\db\QueryBuilder
getColumnType() 抽象的なカラム型を物理的なカラム型に変換します。 yii\db\QueryBuilder
getExpressionBuilder() $expression に適した yii\db\ExpressionBuilderInterface のオブジェクトを取得します。 yii\db\QueryBuilder
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\BaseObject
hasProperty() プロパティが定義されているかどうかを示す値を返します。 yii\base\BaseObject
init() オブジェクトを初期化します。 yii\db\QueryBuilder
insert() INSERT SQLステートメントを作成します。 yii\db\QueryBuilder
renameColumn() カラムの名前を変更するためのSQLステートメントを構築します。 yii\db\QueryBuilder
renameTable() DBテーブルの名前を変更するためのSQLステートメントを構築します。 yii\db\QueryBuilder
resetSequence() テーブルの主キーのシーケンス値をリセットするためのSQLステートメントを作成します。 yii\db\QueryBuilder
selectExists() SELECT EXISTS() SQLステートメントを作成します。 yii\db\QueryBuilder
setConditionClasses() $conditionClasses プロパティのセッター。 yii\db\QueryBuilder
setExpressionBuilders() $expressionBuilders プロパティのセッター。 yii\db\QueryBuilder
truncateTable() DBテーブルを切り捨てるためのSQLステートメントを構築します。 yii\db\QueryBuilder
update() UPDATE SQLステートメントを作成します。 yii\db\QueryBuilder
upsert() データベーステーブルに、まだ存在しない(一意制約に一致する)行を挿入し、存在する場合は更新するSQLステートメントを作成します。 yii\db\QueryBuilder

保護されたメソッド

継承されたメソッドを非表示

メソッド 説明 定義元
defaultConditionClasses() デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。詳細については、$conditionClasses のドキュメントを参照してください。 yii\db\QueryBuilder
defaultExpressionBuilders() デフォルトの式ビルダーの配列を含みます。このクエリビルダーのデフォルトの式ビルダーを変更したい場合は、このメソッドを拡張してオーバーライドしてください。詳細については、$expressionBuilders のドキュメントを参照してください。 yii\db\QueryBuilder
extractAlias() テーブルエイリアスがある場合はそれを抽出し、ない場合はfalseを返します。 yii\db\QueryBuilder
hasLimit() 指定された制限が有効かどうかを確認します。 yii\db\QueryBuilder
hasOffset() 指定されたオフセットが有効かどうかを確認します。 yii\db\QueryBuilder
prepareInsertSelectSubQuery() INSERT INTO ... SELECT SQLステートメントの select-subquery とフィールド名を準備します。 yii\db\QueryBuilder
prepareInsertValues() INSERT SQLステートメントのVALUES部分を準備します。 yii\db\QueryBuilder
prepareUpdateSets() UPDATE SQLステートメントのSET部分を準備します。 yii\db\QueryBuilder
prepareUpsertColumns() yii\db\QueryBuilder

定数

継承された定数を隠す

定数 説明 定義元
PARAM_PREFIX ':qp' 自動生成されたクエリバインドパラメータのプレフィックス。 yii\db\QueryBuilder

プロパティ詳細

継承されたプロパティを非表示

$conditionBuilders 保護されたプロパティ
2.0.14から非推奨。使用されておらず、2.1.0で削除されます。

クエリ条件からビルダーメソッドへのマップ。これらのメソッドは、buildCondition() によって、配列構文からSQL条件を構築するために使用されます。

protected array $conditionBuilders = []
$conditionClasses 保護されたプロパティ (バージョン2.0.14から利用可能)

条件エイリアスから条件クラスへのマップ。例:

return [
    'LIKE' => yii\db\condition\LikeCondition::class,
];

このプロパティは、createConditionFromArray() メソッドで使用されます。defaultConditionClasses() メソッドのデフォルトの条件クラスリストを参照してください。

カスタム条件のサポートを追加したい場合は、setConditionClasses() メソッドを使用してください。

参考

protected array $conditionClasses = []
$db パブリックプロパティ

データベース接続。

public yii\db\Connection $db null
$expressionBuilders 保護されたプロパティ (バージョン2.0.14から利用可能)

式クラスから式ビルダークラスへのマップ。例:

[
   yii\db\Expression::class => yii\db\ExpressionBuilder::class
]

このプロパティは、主に buildExpression() によって、式オブジェクトからSQL式を構築するために使用されます。defaultExpressionBuilders() メソッドのデフォルト値を参照してください。

既存のビルダーをオーバーライドしたり、カスタムビルダーを追加したりするには、setExpressionBuilder() メソッドを使用してください。新しい項目はこの配列の末尾に追加されます。

ビルダーを見つけるために、buildExpression() は、このマップ内に式クラスが正確に存在するかどうかを確認します。存在しない場合は、このマップで定義されているクラスを式が拡張しているかどうかを逆方向に反復処理して確認します。

参考

$separator パブリックプロパティ

SQLステートメントの異なるフラグメント間の区切り文字。デフォルトは空白です。これは主に build() がSQLステートメントを生成する際に使用されます。

public string $separator ' '
$typeMap パブリックプロパティ

物理的なカラム型にマップされた抽象的なカラム型。これは主に、DBに依存しないデータ型指定を使用してテーブルを作成/変更することをサポートするために使用されます。子クラスはこのプロパティをオーバーライドして、サポートされている型のマッピングを宣言する必要があります。

public array $typeMap = []

メソッド詳細

継承されたメソッドを非表示

__call() パブリックメソッド

定義場所: yii\base\BaseObject::__call()

クラスメソッドではない名前付きメソッドを呼び出します。

このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

public mixed __call ( $name, $params )
$name 文字列

メソッド名

$params 配列

メソッドパラメータ

戻り値 mixed

メソッドの戻り値

例外 yii\base\UnknownMethodException

不明なメソッドを呼び出すとき

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() パブリックメソッド

コンストラクタ。

public void __construct ( $connection, $config = [] )
$connection yii\db\Connection

データベース接続。

$config 配列

オブジェクトプロパティを初期化するために使用される名前と値のペア

                public function __construct($connection, $config = [])
{
    $this->db = $connection;
    parent::__construct($config);
}

            
__get() public メソッド

定義元: yii\base\BaseObject::__get()

オブジェクトプロパティの値を返します。

$value = $object->property; の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

以下も参照してください: __set().

public mixed __get ( $name )
$name 文字列

プロパティ名

戻り値 mixed

プロパティの値

例外 yii\base\UnknownPropertyException

プロパティが定義されていない場合

例外 yii\base\InvalidCallException

プロパティが書き込み専用の場合

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public メソッド

定義元: yii\base\BaseObject::__isset()

プロパティが設定されているか、つまり定義されていて null でないかを確認します。

isset($object->property) の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

プロパティが定義されていない場合は、falseが返されることに注意してください。

以下も参照してください: https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name 文字列

プロパティ名またはイベント名

戻り値 boolean

指定されたプロパティが設定されているかどうか (nullではない)

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public メソッド

定義元: yii\base\BaseObject::__set()

オブジェクトプロパティの値を設定します。

$object->property = $value; の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

以下も参照してください: __get().

public void __set ( $name, $value )
$name 文字列

プロパティ名またはイベント名

$value mixed

プロパティの値

例外 yii\base\UnknownPropertyException

プロパティが定義されていない場合

例外 yii\base\InvalidCallException

プロパティが読み取り専用の場合

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public メソッド

定義元: yii\base\BaseObject::__unset()

オブジェクトプロパティを null に設定します。

unset($object->property) の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

プロパティが定義されていない場合、このメソッドは何もしないことに注意してください。プロパティが読み取り専用の場合、例外がスローされます。

以下も参照してください: https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name 文字列

プロパティ名

例外 yii\base\InvalidCallException

プロパティが読み取り専用の場合

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
addCheck() public メソッド (バージョン 2.0.13 以降で利用可能)

既存のテーブルにチェック制約を追加するための SQL コマンドを作成します。

public string addCheck ( $name, $table, $expression )
$name 文字列

チェック制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

チェック制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。

$expression 文字列

CHECK 制約のSQL。

戻り値 文字列

既存のテーブルにチェック制約を追加するためのSQL文。

                public function addCheck($name, $table, $expression)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' CHECK (' . $this->db->quoteSql($expression) . ')';
}

            
addColumn() public メソッド

新しい DB カラムを追加するための SQL ステートメントを構築します。

public string addColumn ( $table, $column, $type )
$table 文字列

新しいカラムが追加されるテーブル。テーブル名はメソッドによって適切にクォートされます。

$column 文字列

新しいカラムの名前。名前はメソッドによって適切にクォートされます。

$type 文字列

カラムの型。getColumnType() メソッドが呼び出され、抽象カラム型 (もしあれば) を物理的な型に変換します。抽象型として認識されないものは、生成されたSQLに保持されます。たとえば、'string' は 'varchar(255)' に変換され、'string not null' は 'varchar(255) not null' になります。

戻り値 文字列

新しいカラムを追加するためのSQL文。

                public function addColumn($table, $column, $type)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' ADD ' . $this->db->quoteColumnName($column) . ' '
        . $this->getColumnType($type);
}

            
addCommentOnColumn() public メソッド (バージョン 2.0.8 以降で利用可能)

カラムにコメントを追加するための SQL コマンドを構築します。

public string addCommentOnColumn ( $table, $column, $comment )
$table 文字列

コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。

$column 文字列

コメントが追加されるカラムの名前。カラム名はメソッドによって適切にクォートされます。

$comment 文字列

追加するコメントのテキスト。コメントはメソッドによって適切にクォートされます。

戻り値 文字列

カラムにコメントを追加するためのSQL文

                public function addCommentOnColumn($table, $column, $comment)
{
    return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS ' . $this->db->quoteValue($comment);
}

            
addCommentOnTable() public メソッド (バージョン 2.0.8 以降で利用可能)

テーブルにコメントを追加するための SQL コマンドを構築します。

public string addCommentOnTable ( $table, $comment )
$table 文字列

コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。

$comment 文字列

追加するコメントのテキスト。コメントはメソッドによって適切にクォートされます。

戻り値 文字列

テーブルにコメントを追加するためのSQL文

                public function addCommentOnTable($table, $comment)
{
    return 'COMMENT ON TABLE ' . $this->db->quoteTableName($table) . ' IS ' . $this->db->quoteValue($comment);
}

            
addDefaultValue() public メソッド (バージョン 2.0.13 以降で利用可能)

既存のテーブルにデフォルト値制約を追加するための SQL コマンドを作成します。

public string addDefaultValue ( $name, $table, $column, $value )
$name 文字列

デフォルト値制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

デフォルト値制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。

$column 文字列

制約が追加されるカラムの名前。名前はメソッドによって適切にクォートされます。

$value mixed

デフォルト値。

戻り値 文字列

既存のテーブルにデフォルト値制約を追加するためのSQL文。

例外 yii\base\NotSupportedException

基盤となるDBMSでサポートされていない場合。

                public function addDefaultValue($name, $table, $column, $value)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support adding default value constraints.');
}

            
addForeignKey() public メソッド

既存のテーブルに外部キー制約を追加するための SQL ステートメントを構築します。

このメソッドは、テーブル名とカラム名を適切にクォートします。

public string addForeignKey ( $name, $table, $columns, $refTable, $refColumns, $delete null, $update null )
$name 文字列

外部キー制約の名前。

$table 文字列

外部キー制約が追加されるテーブル。

$columns string|array

制約が追加されるカラムの名前。複数のカラムがある場合は、カンマで区切るか、それらを表すために配列を使用します。

$refTable 文字列

外部キーが参照するテーブル。

$refColumns string|array

外部キーが参照するカラムの名前。複数のカラムがある場合は、カンマで区切るか、それらを表すために配列を使用します。

$delete string|null

ON DELETE オプション。ほとんどの DBMS は、RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL のオプションをサポートしています。

$update string|null

ON UPDATE オプション。ほとんどの DBMS は、RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL のオプションをサポートしています。

戻り値 文字列

既存のテーブルに外部キー制約を追加するための SQL ステートメント。

                public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
    $sql = 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' ADD CONSTRAINT ' . $this->db->quoteColumnName($name)
        . ' FOREIGN KEY (' . $this->buildColumns($columns) . ')'
        . ' REFERENCES ' . $this->db->quoteTableName($refTable)
        . ' (' . $this->buildColumns($refColumns) . ')';
    if ($delete !== null) {
        $sql .= ' ON DELETE ' . $delete;
    }
    if ($update !== null) {
        $sql .= ' ON UPDATE ' . $update;
    }
    return $sql;
}

            
addPrimaryKey() public メソッド

既存のテーブルにプライマリキー制約を追加するための SQL ステートメントを構築します。

public string addPrimaryKey ( $name, $table, $columns )
$name 文字列

主キー制約の名前。

$table 文字列

主キー制約が追加されるテーブル。

$columns string|array

主キーを構成するカラムのカンマ区切り文字列または配列。

戻り値 文字列

既存のテーブルに主キー制約を追加するための SQL ステートメント。

                public function addPrimaryKey($name, $table, $columns)
{
    if (is_string($columns)) {
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
    }
    foreach ($columns as $i => $col) {
        $columns[$i] = $this->db->quoteColumnName($col);
    }
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' PRIMARY KEY ('
        . implode(', ', $columns) . ')';
}

            
addUnique() public メソッド (バージョン 2.0.13 以降で利用可能)

既存のテーブルに一意制約を追加するための SQL コマンドを作成します。

public string addUnique ( $name, $table, $columns )
$name 文字列

ユニーク制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

ユニーク制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。

$columns string|array

制約が追加されるカラムの名前。複数のカラムがある場合は、カンマで区切ります。名前はメソッドによって適切にクォートされます。

戻り値 文字列

既存のテーブルにユニーク制約を追加するための SQL ステートメント。

                public function addUnique($name, $table, $columns)
{
    if (is_string($columns)) {
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
    }
    foreach ($columns as $i => $col) {
        $columns[$i] = $this->db->quoteColumnName($col);
    }
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
        . $this->db->quoteColumnName($name) . ' UNIQUE ('
        . implode(', ', $columns) . ')';
}

            
alterColumn() public メソッド

カラムの定義を変更するための SQL ステートメントを構築します。

public string alterColumn ( $table, $column, $type )
$table 文字列

カラムが変更されるテーブル。テーブル名はメソッドによって適切にクォートされます。

$column 文字列

変更されるカラムの名前。名前はメソッドによって適切にクォートされます。

$type 文字列

新しいカラムの型。getColumnType() メソッドが、抽象的なカラム型 (存在する場合) を物理的な型に変換するために呼び出されます。抽象的な型として認識されないものは、生成された SQL に保持されます。たとえば、'string' は 'varchar(255)' に変換されますが、'string not null' は 'varchar(255) not null' になります。

戻り値 文字列

カラムの定義を変更するための SQL ステートメント。

                public function alterColumn($table, $column, $type)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' CHANGE '
        . $this->db->quoteColumnName($column) . ' '
        . $this->db->quoteColumnName($column) . ' '
        . $this->getColumnType($type);
}

            
batchInsert() public メソッド

バッチ INSERT SQL ステートメントを生成します。

例:

$sql = $queryBuilder->batchInsert('user', ['name', 'age'], [
    ['Tom', 30],
    ['Jane', 20],
    ['Linda', 25],
]);

各行の値は、対応するカラム名と一致する必要があることに注意してください。

このメソッドは、カラム名を適切にエスケープし、挿入される値をクォートします。

public string batchInsert ( $table, $columns, $rows, &$params = [] )
$table 文字列

新しい行が挿入されるテーブル。

$columns 配列

カラム名

$rows array|Generator

テーブルに一括挿入される行

$params 配列

バインドパラメータ。このパラメータは 2.0.14 から存在します。

戻り値 文字列

一括 INSERT SQL ステートメント

                public function batchInsert($table, $columns, $rows, &$params = [])
{
    if (empty($rows)) {
        return '';
    }
    $schema = $this->db->getSchema();
    if (($tableSchema = $schema->getTableSchema($table)) !== null) {
        $columnSchemas = $tableSchema->columns;
    } else {
        $columnSchemas = [];
    }
    $values = [];
    foreach ($rows as $row) {
        $vs = [];
        foreach ($row as $i => $value) {
            if (isset($columns[$i], $columnSchemas[$columns[$i]])) {
                $value = $columnSchemas[$columns[$i]]->dbTypecast($value);
            }
            if (is_string($value)) {
                $value = $schema->quoteValue($value);
            } elseif (is_float($value)) {
                // ensure type cast always has . as decimal separator in all locales
                $value = StringHelper::floatToString($value);
            } elseif ($value === false) {
                $value = 0;
            } elseif ($value === null) {
                $value = 'NULL';
            } elseif ($value instanceof ExpressionInterface) {
                $value = $this->buildExpression($value, $params);
            }
            $vs[] = $value;
        }
        $values[] = '(' . implode(', ', $vs) . ')';
    }
    if (empty($values)) {
        return '';
    }
    foreach ($columns as $i => $name) {
        $columns[$i] = $schema->quoteColumnName($name);
    }
    return 'INSERT INTO ' . $schema->quoteTableName($table)
        . ' (' . implode(', ', $columns) . ') VALUES ' . implode(', ', $values);
}

            
bindParam() public メソッド (バージョン 2.0.14 以降で利用可能)

PARAM_PREFIX を使用して、$value を $params 配列に追加するヘルパーメソッド。

public string bindParam ( $value, &$params )
$value string|null
$params 配列

参照渡し

戻り値 文字列

$params 配列内のプレースホルダー名

                public function bindParam($value, &$params)
{
    $phName = self::PARAM_PREFIX . count($params);
    $params[$phName] = $value;
    return $phName;
}

            
build() public メソッド

yii\db\Query オブジェクトから SELECT SQL ステートメントを生成します。

public array build ( $query, $params = [] )
$query yii\db\Query

SQL ステートメントが生成される yii\db\Query オブジェクト。

$params 配列

生成された SQL ステートメントにバインドされるパラメータ。これらのパラメータは、クエリの構築プロセス中に生成された追加のパラメータとともに結果に含まれます。

戻り値 配列

生成された SQL ステートメント (配列の最初の要素) と、SQL ステートメントにバインドされる対応するパラメータ (配列の 2 番目の要素)。返されるパラメータには、$params で指定されたものが含まれます。

                public function build($query, $params = [])
{
    $query = $query->prepare($this);
    $params = empty($params) ? $query->params : array_merge($params, $query->params);
    $clauses = [
        $this->buildSelect($query->select, $params, $query->distinct, $query->selectOption),
        $this->buildFrom($query->from, $params),
        $this->buildJoin($query->join, $params),
        $this->buildWhere($query->where, $params),
        $this->buildGroupBy($query->groupBy),
        $this->buildHaving($query->having, $params),
    ];
    $sql = implode($this->separator, array_filter($clauses));
    $sql = $this->buildOrderByAndLimit($sql, $query->orderBy, $query->limit, $query->offset);
    if (!empty($query->orderBy)) {
        foreach ($query->orderBy as $expression) {
            if ($expression instanceof ExpressionInterface) {
                $this->buildExpression($expression, $params);
            }
        }
    }
    if (!empty($query->groupBy)) {
        foreach ($query->groupBy as $expression) {
            if ($expression instanceof ExpressionInterface) {
                $this->buildExpression($expression, $params);
            }
        }
    }
    $union = $this->buildUnion($query->union, $params);
    if ($union !== '') {
        $sql = "($sql){$this->separator}$union";
    }
    $with = $this->buildWithQueries($query->withQueries, $params);
    if ($with !== '') {
        $sql = "$with{$this->separator}$sql";
    }
    return [$sql, $params];
}

            
buildAndCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

2 つ以上の SQL 式を AND または OR 演算子で接続します。

public string buildAndCondition ( $operator, $operands, &$params )
$operator 文字列

指定されたオペランドを接続するために使用する演算子

$operands 配列

接続する SQL 式。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

                public function buildAndCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildBetweenCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

BETWEEN 演算子を使用した SQL 式を作成します。

public string buildBetweenCondition ( $operator, $operands, &$params )
$operator 文字列

使用する演算子 (例: BETWEEN または NOT BETWEEN)

$operands 配列

最初のオペランドはカラム名です。2 番目と 3 番目のオペランドは、カラム値が存在すべき間隔を表します。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\base\InvalidArgumentException

オペランドの数が間違っている場合。

                public function buildBetweenCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildColumns() public メソッド

カラムを処理し、必要に応じて適切にクォートします。

すべてのカラムをカンマ区切りの文字列に結合します。

public string buildColumns ( $columns )
$columns string|array

処理対象のカラム。

戻り値 文字列

処理結果。

                public function buildColumns($columns)
{
    if (!is_array($columns)) {
        if (strpos($columns, '(') !== false) {
            return $columns;
        }
        $rawColumns = $columns;
        $columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
        if ($columns === false) {
            throw new InvalidArgumentException("$rawColumns is not valid columns.");
        }
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            $columns[$i] = $this->buildExpression($column);
        } elseif (strpos($column, '(') === false) {
            $columns[$i] = $this->db->quoteColumnName($column);
        }
    }
    return implode(', ', $columns);
}

            
buildCondition() public メソッド

条件の仕様を解析し、対応する SQL 式を生成します。

public string buildCondition ( $condition, &$params )
$condition string|array|yii\db\ExpressionInterface

条件の指定。条件の指定方法については、yii\db\Query::where()を参照してください。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

                public function buildCondition($condition, &$params)
{
    if (is_array($condition)) {
        if (empty($condition)) {
            return '';
        }
        $condition = $this->createConditionFromArray($condition);
    }
    if ($condition instanceof ExpressionInterface) {
        return $this->buildExpression($condition, $params);
    }
    return (string)$condition;
}

            
buildExistsCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

EXISTS 演算子を使用した SQL 式を作成します。

public string buildExistsCondition ( $operator, $operands, &$params )
$operator 文字列

使用する演算子 (例: EXISTS または NOT EXISTS)

$operands 配列

サブクエリを表す yii\db\Query オブジェクトである単一の要素のみを含みます。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\base\InvalidArgumentException

オペランドが yii\db\Query オブジェクトでない場合。

                public function buildExistsCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildExpression() public メソッド (バージョン2.0.14から利用可能)

指定された $expression を構築します

参考

public string buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] )
$expression yii\db\ExpressionInterface

構築する式。

$params 配列

生成されたSQL文にバインドされるパラメータ。これらのパラメータは、式構築プロセス中に生成された追加のパラメータとともに結果に含まれます。

戻り値 文字列

DBMSに渡す前に、引用符で囲まれたりエンコードされたりしないSQL文。

例外 yii\base\InvalidArgumentException

$expressionの構築がこのQueryBuilderでサポートされていない場合。

                public function buildExpression(ExpressionInterface $expression, &$params = [])
{
    $builder = $this->getExpressionBuilder($expression);
    return $builder->build($expression, $params);
}

            
buildFrom() public メソッド

public string buildFrom ( $tables, &$params )
$tables 配列
$params 配列

設定するバインドパラメータ

戻り値 文字列

yii\db\Query::$from から構築されたFROM句。

                public function buildFrom($tables, &$params)
{
    if (empty($tables)) {
        return '';
    }
    $tables = $this->quoteTableNames($tables, $params);
    return 'FROM ' . implode(', ', $tables);
}

            
buildGroupBy() public メソッド

public string buildGroupBy ( $columns )
$columns 配列
戻り値 文字列

GROUP BY句。

                public function buildGroupBy($columns)
{
    if (empty($columns)) {
        return '';
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            $columns[$i] = $this->buildExpression($column);
        } elseif (strpos($column, '(') === false) {
            $columns[$i] = $this->db->quoteColumnName($column);
        }
    }
    return 'GROUP BY ' . implode(', ', $columns);
}

            
buildHashCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

カラムと値のペアに基づいて条件を作成します。

public string buildHashCondition ( $condition, &$params )
$condition 配列

条件の指定。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

                public function buildHashCondition($condition, &$params)
{
    return $this->buildCondition(new HashCondition($condition), $params);
}

            
buildHaving() public メソッド

public string buildHaving ( $condition, &$params )
$condition string|array
$params 配列

設定するバインドパラメータ

戻り値 文字列

yii\db\Query::$having から構築されたHAVING句。

                public function buildHaving($condition, &$params)
{
    $having = $this->buildCondition($condition, $params);
    return $having === '' ? '' : 'HAVING ' . $having;
}

            
buildInCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

IN 演算子を使用した SQL 式を作成します。

public string buildInCondition ( $operator, $operands, &$params )
$operator 文字列

使用する演算子(例:IN または NOT IN

$operands 配列

最初のオペランドはカラム名です。配列の場合は複合IN条件が生成されます。2番目のオペランドは、カラムの値が含まれる必要のある値の配列です。空の配列の場合、生成される式は、演算子がINの場合はfalse値になり、演算子がNOT INの場合は空になります。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\db\Exception

オペランドの数が間違っている場合。

                public function buildInCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildJoin() public メソッド

public string buildJoin ( $joins, &$params )
$joins 配列
$params 配列

設定するバインドパラメータ

戻り値 文字列

yii\db\Query::$join から構築されたJOIN句。

例外 yii\db\Exception

$joinsパラメータが正しい形式でない場合。

                public function buildJoin($joins, &$params)
{
    if (empty($joins)) {
        return '';
    }
    foreach ($joins as $i => $join) {
        if (!is_array($join) || !isset($join[0], $join[1])) {
            throw new Exception('A join clause must be specified as an array of join type, join table, and optionally join condition.');
        }
        // 0:join type, 1:join table, 2:on-condition (optional)
        list($joinType, $table) = $join;
        $tables = $this->quoteTableNames((array)$table, $params);
        $table = reset($tables);
        $joins[$i] = "$joinType $table";
        if (isset($join[2])) {
            $condition = $this->buildCondition($join[2], $params);
            if ($condition !== '') {
                $joins[$i] .= ' ON ' . $condition;
            }
        }
    }
    return implode($this->separator, $joins);
}

            
buildLikeCondition() public メソッド
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

LIKE 演算子を使用した SQL 式を作成します。

public string buildLikeCondition ( $operator, $operands, &$params )
$operator 文字列

使用する演算子(例:LIKENOT LIKEOR LIKE または OR NOT LIKE

$operands 配列

2つまたは3つのオペランドの配列。

  • 最初のオペランドはカラム名です。
  • 2番目のオペランドは、列の値と比較される単一の値または値の配列です。空の配列の場合、演算子がLIKEまたはOR LIKEであれば、生成される式はfalse値になり、演算子がNOT LIKEまたはOR NOT LIKEであれば、空になります。
  • オプションの3番目のオペランドは、値内の特殊文字をエスケープする方法を指定するためにも使用できます。オペランドは、特殊文字からエスケープされた対応文字へのマッピングの配列である必要があります。このオペランドが指定されていない場合は、デフォルトのエスケープマッピングが使用されます。値がすでにエスケープされており、エスケープを適用する必要がないことを示すには、falseまたは空の配列を使用できます。エスケープマッピングを使用する場合(または3番目のオペランドが指定されていない場合)、値は自動的にパーセント記号のペアで囲まれることに注意してください。
$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\base\InvalidArgumentException

オペランドの数が間違っている場合。

                public function buildLikeCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildLimit() public method

public string buildLimit ( $limit, $offset )
$limit integer
$offset integer
戻り値 文字列

LIMIT句とOFFSET句

                public function buildLimit($limit, $offset)
{
    $sql = '';
    if ($this->hasLimit($limit)) {
        $sql = 'LIMIT ' . $limit;
    }
    if ($this->hasOffset($offset)) {
        $sql .= ' OFFSET ' . $offset;
    }
    return ltrim($sql);
}

            
buildNotCondition() public method
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

NOT 演算子で SQL 式を反転させます。

public string buildNotCondition ( $operator, $operands, &$params )
$operator 文字列

指定されたオペランドを接続するために使用する演算子

$operands 配列

接続する SQL 式。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\base\InvalidArgumentException

オペランドの数が間違っている場合。

                public function buildNotCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildOrderBy() public method

public string buildOrderBy ( $columns )
$columns 配列
戻り値 文字列

yii\db\Query::$orderByから構築されたORDER BY句。

                public function buildOrderBy($columns)
{
    if (empty($columns)) {
        return '';
    }
    $orders = [];
    foreach ($columns as $name => $direction) {
        if ($direction instanceof ExpressionInterface) {
            $orders[] = $this->buildExpression($direction);
        } else {
            $orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
        }
    }
    return 'ORDER BY ' . implode(', ', $orders);
}

            
buildOrderByAndLimit() public method

ORDER BY および LIMIT/OFFSET 句を構築し、指定された SQL に付加します。

public string buildOrderByAndLimit ( $sql, $orderBy, $limit, $offset )
$sql 文字列

既存のSQL(ORDER BY / LIMIT / OFFSETなし)

$orderBy 配列

並び替えの列。このパラメータの指定方法の詳細については、yii\db\Query::orderBy()を参照してください。

$limit integer

制限数。詳細については、yii\db\Query::limit()を参照してください。

$offset integer

オフセット数。詳細については、yii\db\Query::offset()を参照してください。

戻り値 文字列

ORDER BY / LIMIT / OFFSET(存在する場合)で完成したSQL

                public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    $orderBy = $this->buildOrderBy($orderBy);
    if ($orderBy !== '') {
        $sql .= $this->separator . $orderBy;
    }
    $limit = $this->buildLimit($limit, $offset);
    if ($limit !== '') {
        $sql .= $this->separator . $limit;
    }
    return $sql;
}

            
buildSelect() public method

public string buildSelect ( $columns, &$params, $distinct false, $selectOption null )
$columns 配列
$params 配列

設定するバインドパラメータ

$distinct boolean
$selectOption string|null
戻り値 文字列

yii\db\Query::$selectから構築されたSELECT句。

                public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
{
    $select = $distinct ? 'SELECT DISTINCT' : 'SELECT';
    if ($selectOption !== null) {
        $select .= ' ' . $selectOption;
    }
    if (empty($columns)) {
        return $select . ' *';
    }
    foreach ($columns as $i => $column) {
        if ($column instanceof ExpressionInterface) {
            if (is_int($i)) {
                $columns[$i] = $this->buildExpression($column, $params);
            } else {
                $columns[$i] = $this->buildExpression($column, $params) . ' AS ' . $this->db->quoteColumnName($i);
            }
        } elseif ($column instanceof Query) {
            list($sql, $params) = $this->build($column, $params);
            $columns[$i] = "($sql) AS " . $this->db->quoteColumnName($i);
        } elseif (is_string($i) && $i !== $column) {
            if (strpos($column, '(') === false) {
                $column = $this->db->quoteColumnName($column);
            }
            $columns[$i] = "$column AS " . $this->db->quoteColumnName($i);
        } elseif (strpos($column, '(') === false) {
            if (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $column, $matches)) {
                $columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
            } else {
                $columns[$i] = $this->db->quoteColumnName($column);
            }
        }
    }
    return $select . ' ' . implode(', ', $columns);
}

            
buildSimpleCondition() public method
2.0.14 で非推奨。代わりに buildCondition() を使用してください。

"column" 演算子 value のような SQL 式を作成します。

public string buildSimpleCondition ( $operator, $operands, &$params )
$operator 文字列

使用する演算子。 ><=など、何でも使用できます。

$operands 配列

2つの列名が含まれています。

$params 配列

設定するバインドパラメータ

戻り値 文字列

生成された SQL 式

例外 yii\base\InvalidArgumentException

オペランドの数が間違っている場合。

                public function buildSimpleCondition($operator, $operands, &$params)
{
    array_unshift($operands, $operator);
    return $this->buildCondition($operands, $params);
}

            
buildUnion() public method

public string buildUnion ( $unions, &$params )
$unions 配列
$params 配列

設定するバインドパラメータ

戻り値 文字列

yii\db\Query::$unionから構築されたUNION句。

                public function buildUnion($unions, &$params)
{
    if (empty($unions)) {
        return '';
    }
    $result = '';
    foreach ($unions as $i => $union) {
        $query = $union['query'];
        if ($query instanceof Query) {
            list($unions[$i]['query'], $params) = $this->build($query, $params);
        }
        $result .= 'UNION ' . ($union['all'] ? 'ALL ' : '') . '( ' . $unions[$i]['query'] . ' ) ';
    }
    return trim($result);
}

            
buildWhere() public method

public string buildWhere ( $condition, &$params )
$condition string|array
$params 配列

設定するバインドパラメータ

戻り値 文字列

yii\db\Query::$whereから構築されたWHERE句。

                public function buildWhere($condition, &$params)
{
    $where = $this->buildCondition($condition, $params);
    return $where === '' ? '' : 'WHERE ' . $where;
}

            
buildWithQueries() public method (version 2.0.35 以降で使用可能)

yii\db\Query::withQuery()も参照してください。

public string buildWithQueries ( $withs, &$params )
$withs 配列

各WITHクエリの設定

$params 配列

設定するバインドパラメータ

戻り値 文字列

ネストされたクエリを含む、クエリのコンパイルされたWITHプレフィックス

                public function buildWithQueries($withs, &$params)
{
    if (empty($withs)) {
        return '';
    }
    $recursive = false;
    $result = [];
    foreach ($withs as $i => $with) {
        if ($with['recursive']) {
            $recursive = true;
        }
        $query = $with['query'];
        if ($query instanceof Query) {
            list($with['query'], $params) = $this->build($query, $params);
        }
        $result[] = $with['alias'] . ' AS (' . $with['query'] . ')';
    }
    return 'WITH ' . ($recursive ? 'RECURSIVE ' : '') . implode(', ', $result);
}

            
canGetProperty() public method

定義: yii\base\BaseObject::canGetProperty()

プロパティが読み取り可能かどうかを示す値を返します。

プロパティが読み取り可能である条件は次のとおりです。

  • クラスには、指定された名前に関連付けられたgetterメソッドがあります(この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスには、指定された名前のメンバー変数があります($checkVarsがtrueの場合)。

canSetProperty()も参照してください。

public boolean canGetProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars boolean

メンバー変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティを読み取ることができるかどうか

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

定義: yii\base\BaseObject::canSetProperty()

プロパティが設定可能かどうかを示す値を返します。

プロパティが書き込み可能である条件は次のとおりです。

  • クラスには、指定された名前に関連付けられたsetterメソッドがあります(この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスには、指定された名前のメンバー変数があります($checkVarsがtrueの場合)。

canGetProperty()も参照してください。

public boolean canSetProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars boolean

メンバー変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティを書き込むことができるかどうか

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
checkIntegrity() public method

整合性チェックを有効または無効にするための SQL ステートメントを構築します。

public string checkIntegrity ( $check true, $schema '', $table '' )
$check boolean

整合性チェックを有効にするか無効にするか。

$schema 文字列

テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマまたはデフォルトのスキーマを意味します。

$table 文字列

テーブル名。デフォルトは空文字列で、テーブルが変更されないことを意味します。

戻り値 文字列

整合性チェックのためのSQL文

例外 yii\base\NotSupportedException

これが基盤となるDBMSでサポートされていない場合

                public function checkIntegrity($check = true, $schema = '', $table = '')
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support enabling/disabling integrity check.');
}

            
className() public static method
2.0.14で非推奨になりました。PHP >= 5.5では、代わりに::classを使用してください。

定義元: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
戻り値 文字列

このクラスの完全修飾名。

                public static function className()
{
    return get_called_class();
}

            
createConditionFromArray() public method (available since version 2.0.14)

yii\db\Query::where() で説明されているように、配列形式で定義された $condition を $conditionClasses マップに従って yii\db\condition\ConditionInterface のインスタンスに変換します。

$conditionClasses も参照してください。

public yii\db\conditions\ConditionInterface createConditionFromArray ( $condition )
$condition string|array

                public function createConditionFromArray($condition)
{
    if (isset($condition[0])) { // operator format: operator, operand 1, operand 2, ...
        $operator = strtoupper(array_shift($condition));
        if (isset($this->conditionClasses[$operator])) {
            $className = $this->conditionClasses[$operator];
        } else {
            $className = 'yii\db\conditions\SimpleCondition';
        }
        /** @var ConditionInterface $className */
        return $className::fromArrayDefinition($operator, $condition);
    }
    // hash format: 'column1' => 'value1', 'column2' => 'value2', ...
    return new HashCondition($condition);
}

            
createIndex() public method

新しいインデックスを作成するための SQL ステートメントを構築します。

public string createIndex ( $name, $table, $columns, $unique false )
$name 文字列

インデックスの名前。この名前はメソッドによって適切にクォートされます。

$table 文字列

新しいインデックスが作成されるテーブル。テーブル名はメソッドによって適切にクォートされます。

$columns string|array

インデックスに含める必要があるカラム。複数のカラムがある場合は、コンマで区切るか、配列を使用してそれらを表します。各カラム名は、名前に括弧が見つからない限り、メソッドによって適切にクォートされます。

$unique boolean

作成されたインデックスにUNIQUE制約を追加するかどうか。

戻り値 文字列

新しいインデックスを作成するためのSQL文。

                public function createIndex($name, $table, $columns, $unique = false)
{
    return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
        . $this->db->quoteTableName($name) . ' ON '
        . $this->db->quoteTableName($table)
        . ' (' . $this->buildColumns($columns) . ')';
}

            
createTable() public method

新しい DB テーブルを作成するための SQL ステートメントを構築します。

新しいテーブルのカラムは、名前と定義のペア(例:'name' => 'string')として指定する必要があります。ここで、nameはメソッドによって適切にクォートされるカラム名を表し、definitionは抽象的なDB型を含むカラム型を表します。抽象的な型を物理的な型に変換するために、getColumnType()メソッドが呼び出されます。

カラムが定義のみで指定されている場合(例:'PRIMARY KEY (name, type)')、生成されたSQLに直接挿入されます。

例:

$sql = $queryBuilder->createTable('user', [
 'id' => 'pk',
 'name' => 'string',
 'age' => 'integer',
 'column_name double precision null default null', # definition only example
]);
public string createTable ( $table, $columns, $options null )
$table 文字列

作成するテーブルの名前。この名前はメソッドによって適切にクォートされます。

$columns 配列

新しいテーブルのカラム(name => definition)。

$options string|null

生成されたSQLに追加される追加のSQLフラグメント。

戻り値 文字列

新しいDBテーブルを作成するためのSQL文。

                public function createTable($table, $columns, $options = null)
{
    $cols = [];
    foreach ($columns as $name => $type) {
        if (is_string($name)) {
            $cols[] = "\t" . $this->db->quoteColumnName($name) . ' ' . $this->getColumnType($type);
        } else {
            $cols[] = "\t" . $type;
        }
    }
    $sql = 'CREATE TABLE ' . $this->db->quoteTableName($table) . " (\n" . implode(",\n", $cols) . "\n)";
    return $options === null ? $sql : $sql . ' ' . $options;
}

            
createView() public method (available since version 2.0.14)

SQL ビューを作成します。

public string createView ( $viewName, $subQuery )
$viewName 文字列

作成するビューの名前。

$subQuery string|yii\db\Query

ビューを定義するselect文。これは、文字列またはyii\db\Queryオブジェクトのいずれかになります。

戻り値 文字列

CREATE VIEW SQL文。

                public function createView($viewName, $subQuery)
{
    if ($subQuery instanceof Query) {
        list($rawQuery, $params) = $this->build($subQuery);
        array_walk(
            $params,
            function (&$param) {
                $param = $this->db->quoteValue($param);
            }
        );
        $subQuery = strtr($rawQuery, $params);
    }
    return 'CREATE VIEW ' . $this->db->quoteTableName($viewName) . ' AS ' . $subQuery;
}

            
defaultConditionClasses() protected method (available since version 2.0.14)

デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。詳細については、$conditionClasses のドキュメントを参照してください。

$conditionClasses も参照してください。

protected array defaultConditionClasses ( )

                protected function defaultConditionClasses()
{
    return [
        'NOT' => 'yii\db\conditions\NotCondition',
        'AND' => 'yii\db\conditions\AndCondition',
        'OR' => 'yii\db\conditions\OrCondition',
        'BETWEEN' => 'yii\db\conditions\BetweenCondition',
        'NOT BETWEEN' => 'yii\db\conditions\BetweenCondition',
        'IN' => 'yii\db\conditions\InCondition',
        'NOT IN' => 'yii\db\conditions\InCondition',
        'LIKE' => 'yii\db\conditions\LikeCondition',
        'NOT LIKE' => 'yii\db\conditions\LikeCondition',
        'OR LIKE' => 'yii\db\conditions\LikeCondition',
        'OR NOT LIKE' => 'yii\db\conditions\LikeCondition',
        'EXISTS' => 'yii\db\conditions\ExistsCondition',
        'NOT EXISTS' => 'yii\db\conditions\ExistsCondition',
    ];
}

            
defaultExpressionBuilders() protected method (available since version 2.0.14)

デフォルトの式ビルダーの配列を含みます。このクエリビルダーのデフォルトの式ビルダーを変更したい場合は、このメソッドを拡張してオーバーライドしてください。詳細については、$expressionBuilders のドキュメントを参照してください。

$expressionBuilders も参照してください。

protected array defaultExpressionBuilders ( )

                protected function defaultExpressionBuilders()
{
    return [
        'yii\db\Query' => 'yii\db\QueryExpressionBuilder',
        'yii\db\PdoValue' => 'yii\db\PdoValueBuilder',
        'yii\db\Expression' => 'yii\db\ExpressionBuilder',
        'yii\db\conditions\ConjunctionCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\NotCondition' => 'yii\db\conditions\NotConditionBuilder',
        'yii\db\conditions\AndCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\OrCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
        'yii\db\conditions\BetweenCondition' => 'yii\db\conditions\BetweenConditionBuilder',
        'yii\db\conditions\InCondition' => 'yii\db\conditions\InConditionBuilder',
        'yii\db\conditions\LikeCondition' => 'yii\db\conditions\LikeConditionBuilder',
        'yii\db\conditions\ExistsCondition' => 'yii\db\conditions\ExistsConditionBuilder',
        'yii\db\conditions\SimpleCondition' => 'yii\db\conditions\SimpleConditionBuilder',
        'yii\db\conditions\HashCondition' => 'yii\db\conditions\HashConditionBuilder',
        'yii\db\conditions\BetweenColumnsCondition' => 'yii\db\conditions\BetweenColumnsConditionBuilder',
    ];
}

            
delete() public method

DELETE SQL ステートメントを作成します。

例:

$sql = $queryBuilder->delete('user', 'status = 0');

このメソッドは、テーブル名とカラム名を適切にエスケープします。

public string delete ( $table, $condition, &$params )
$table 文字列

データが削除されるテーブル。

$condition array|string

WHERE部分に配置される条件。条件の指定方法については、yii\db\Query::where()を参照してください。

$params 配列

このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。

戻り値 文字列

DELETE SQL

                public function delete($table, $condition, &$params)
{
    $sql = 'DELETE FROM ' . $this->db->quoteTableName($table);
    $where = $this->buildWhere($condition, $params);
    return $where === '' ? $sql : $sql . ' ' . $where;
}

            
dropCheck() public method (available since version 2.0.13)

チェック制約を削除するための SQL コマンドを作成します。

public string dropCheck ( $name, $table )
$name 文字列

削除するチェック制約の名前。この名前はメソッドによって適切にクォートされます。

$table 文字列

チェック制約を削除するテーブル。この名前はメソッドによって適切にクォートされます。

戻り値 文字列

チェック制約を削除するためのSQL文。

                public function dropCheck($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropColumn() public method

DB カラムを削除するための SQL ステートメントを構築します。

public string dropColumn ( $table, $column )
$table 文字列

カラムが削除されるテーブル。この名前はメソッドによって適切にクォートされます。

$column 文字列

削除するカラムの名前。この名前はメソッドによって適切にクォートされます。

戻り値 文字列

DBカラムを削除するためのSQL文。

                public function dropColumn($table, $column)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP COLUMN ' . $this->db->quoteColumnName($column);
}

            
dropCommentFromColumn() public メソッド (バージョン 2.0.8 から利用可能)

カラムにコメントを追加するための SQL コマンドを構築します。

public string dropCommentFromColumn ( $table, $column )
$table 文字列

コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。

$column 文字列

コメントが追加されるカラムの名前。カラム名はメソッドによって適切にクォートされます。

戻り値 文字列

カラムにコメントを追加するためのSQL文

                public function dropCommentFromColumn($table, $column)
{
    return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS NULL';
}

            
dropCommentFromTable() public メソッド (バージョン 2.0.8 から利用可能)

テーブルにコメントを追加するための SQL コマンドを構築します。

public string dropCommentFromTable ( $table )
$table 文字列

コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。

戻り値 文字列

カラムにコメントを追加するためのSQL文

                public function dropCommentFromTable($table)
{
    return 'COMMENT ON TABLE ' . $this->db->quoteTableName($table) . ' IS NULL';
}

            
dropDefaultValue() public メソッド (バージョン 2.0.13 から利用可能)

デフォルト値制約を削除するための SQL コマンドを作成します。

public string dropDefaultValue ( $name, $table )
$name 文字列

削除するデフォルト値制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

デフォルト値制約を削除するテーブル。名前はメソッドによって適切にクォートされます。

戻り値 文字列

デフォルト値制約を削除するためのSQLステートメント。

例外 yii\base\NotSupportedException

基盤となるDBMSでサポートされていない場合。

                public function dropDefaultValue($name, $table)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support dropping default value constraints.');
}

            
dropForeignKey() public メソッド

外部キー制約を削除するための SQL ステートメントを構築します。

public string dropForeignKey ( $name, $table )
$name 文字列

削除する外部キー制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

外部キーを削除するテーブル。名前はメソッドによって適切にクォートされます。

戻り値 文字列

外部キー制約を削除するためのSQLステートメント。

                public function dropForeignKey($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropIndex() public メソッド

インデックスを削除するための SQL ステートメントを構築します。

public string dropIndex ( $name, $table )
$name 文字列

削除するインデックスの名前。名前はメソッドによって適切にクォートされます。

$table 文字列

インデックスを削除するテーブル。名前はメソッドによって適切にクォートされます。

戻り値 文字列

インデックスを削除するためのSQLステートメント。

                public function dropIndex($name, $table)
{
    return 'DROP INDEX ' . $this->db->quoteTableName($name) . ' ON ' . $this->db->quoteTableName($table);
}

            
dropPrimaryKey() public メソッド

既存のテーブルからプライマリキー制約を削除するための SQL ステートメントを構築します。

public string dropPrimaryKey ( $name, $table )
$name 文字列

削除する主キー制約の名前。

$table 文字列

主キー制約を削除するテーブル。

戻り値 文字列

既存のテーブルから主キー制約を削除するためのSQLステートメント。

                public function dropPrimaryKey($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropTable() public メソッド

DB テーブルを削除するための SQL ステートメントを構築します。

public string dropTable ( $table )
$table 文字列

削除するテーブル。名前はメソッドによって適切にクォートされます。

戻り値 文字列

DBテーブルを削除するためのSQLステートメント。

                public function dropTable($table)
{
    return 'DROP TABLE ' . $this->db->quoteTableName($table);
}

            
dropUnique() public メソッド (バージョン 2.0.13 から利用可能)

一意制約を削除するための SQL コマンドを作成します。

public string dropUnique ( $name, $table )
$name 文字列

削除するユニーク制約の名前。名前はメソッドによって適切にクォートされます。

$table 文字列

ユニーク制約を削除するテーブル。名前はメソッドによって適切にクォートされます。

戻り値 文字列

ユニーク制約を削除するためのSQLステートメント。

                public function dropUnique($name, $table)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}

            
dropView() public メソッド (バージョン 2.0.14 から利用可能)

SQL ビューを削除します。

public string dropView ( $viewName )
$viewName 文字列

削除するビューの名前。

戻り値 文字列

DROP VIEW SQLステートメント。

                public function dropView($viewName)
{
    return 'DROP VIEW ' . $this->db->quoteTableName($viewName);
}

            
executeResetSequence() public メソッド (バージョン 2.0.16 から利用可能)

テーブルの主キーのシーケンス値をリセットするSQLステートメントを実行します。

executeである理由は、一部のデータベース(Oracle)ではそうするために複数のクエリが必要なためです。シーケンスは、次に挿入される新しい行の主キーが指定された値または既存の最大値+1になるようにリセットされます。

public void executeResetSequence ( $table, $value null )
$table 文字列

主キーシーケンスをリセットするテーブルの名前

$value array|string|null

次に挿入される新しい行の主キーの値。これが設定されていない場合、次に新しい行の主キーは既存の最大値+1になります。

例外 yii\base\NotSupportedException

これが基盤となるDBMSでサポートされていない場合

                public function executeResetSequence($table, $value = null)
{
    $this->db->createCommand()->resetSequence($table, $value)->execute();
}

            
extractAlias() protected メソッド (バージョン 2.0.24 から利用可能)

テーブルエイリアスがある場合はそれを抽出し、ない場合はfalseを返します。

protected boolean|array extractAlias ( $table )
$table

                protected function extractAlias($table)
{
    if (preg_match('/^(.*?)(?i:\s+as|)\s+([^ ]+)$/', $table, $matches)) {
        return $matches;
    }
    return false;
}

            
getColumnType() public メソッド

抽象的なカラム型を物理的なカラム型に変換します。

変換は、$typeMap で指定された型マップを使用して行われます。次の抽象的なカラム型がサポートされています(対応する物理型を説明するためにMySQLを例として使用します)。

  • pk: 自動インクリメントのプライマリキー型。 "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。
  • bigpk: 自動インクリメントのプライマリキー型。 "bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。
  • upk: 符号なし自動インクリメントのプライマリキー型。 "int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。
  • char: char 型。 "char(1)" に変換されます。
  • string: string 型。 "varchar(255)" に変換されます。
  • text: 長い string 型。 "text" に変換されます。
  • smallint: 小さい integer 型。 "smallint(6)" に変換されます。
  • integer: integer 型。 "int(11)" に変換されます。
  • bigint: 大きい integer 型。 "bigint(20)" に変換されます。
  • boolean: boolean 型。 "tinyint(1)" に変換されます。
  • float: float 型の数値。 "float" に変換されます。
  • decimal: decimal 型の数値。 "decimal" に変換されます。
  • datetime: datetime 型。 "datetime" に変換されます。
  • timestamp: timestamp 型。 "timestamp" に変換されます。
  • time: time 型。 "time" に変換されます。
  • date: date 型。 "date" に変換されます。
  • money: money 型。 "decimal(19,4)" に変換されます。
  • binary: binary データ型。 "blob" に変換されます。

抽象型がスペースで区切られた2つ以上の部分を含む場合(例:「string NOT NULL」)、最初の部分のみが変換され、残りの部分は変換結果に追加されます。例えば、「string NOT NULL」は「varchar(255) NOT NULL」に変換されます。

一部の抽象型では、型の直後に丸括弧で囲んで長さや精度の制約を指定することもできます。例えば、string(32) は MySQL データベースでは "varchar(32)" に変換されます。基盤となる DBMS がある型に対してこのような制約をサポートしていない場合、それは無視されます。

$typeMap で型が見つからない場合は、変更せずに返されます。

public string getColumnType ( $type )
$type string|yii\db\ColumnSchemaBuilder

抽象的なカラム型

戻り値 文字列

物理的なカラム型。

                public function getColumnType($type)
{
    if ($type instanceof ColumnSchemaBuilder) {
        $type = $type->__toString();
    }
    if (isset($this->typeMap[$type])) {
        return $this->typeMap[$type];
    } elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
        if (isset($this->typeMap[$matches[1]])) {
            return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
        }
    } elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
        if (isset($this->typeMap[$matches[1]])) {
            return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
        }
    }
    return $type;
}

            
getExpressionBuilder() public メソッド (バージョン2.0.14から利用可能)

$expression に適した yii\db\ExpressionBuilderInterface のオブジェクトを取得します。

$expressionBuilders 配列を使用して、適切なビルダー クラスを検索します。

$expressionBuilders も参照してください。

public yii\db\ExpressionBuilderInterface getExpressionBuilder ( yii\db\ExpressionInterface $expression )
$expression yii\db\ExpressionInterface
例外 yii\base\InvalidArgumentException

$expressionの構築がこのQueryBuilderでサポートされていない場合。

                public function getExpressionBuilder(ExpressionInterface $expression)
{
    $className = get_class($expression);
    if (!isset($this->expressionBuilders[$className])) {
        foreach (array_reverse($this->expressionBuilders) as $expressionClass => $builderClass) {
            if (is_subclass_of($expression, $expressionClass)) {
                $this->expressionBuilders[$className] = $builderClass;
                break;
            }
        }
        if (!isset($this->expressionBuilders[$className])) {
            throw new InvalidArgumentException('Expression of class ' . $className . ' can not be built in ' . get_class($this));
        }
    }
    if ($this->expressionBuilders[$className] === __CLASS__) {
        return $this;
    }
    if (!is_object($this->expressionBuilders[$className])) {
        $this->expressionBuilders[$className] = new $this->expressionBuilders[$className]($this);
    }
    return $this->expressionBuilders[$className];
}

            
hasLimit() protected メソッド

指定された制限が有効かどうかを確認します。

protected boolean hasLimit ( $limit )
$limit mixed

指定された制限

戻り値 boolean

制限が有効かどうか

                protected function hasLimit($limit)
{
    return ($limit instanceof ExpressionInterface) || ctype_digit((string)$limit);
}

            
hasMethod() public メソッド

定義場所: yii\base\BaseObject::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

デフォルトの実装は、PHP 関数 method_exists() の呼び出しです。PHP のマジックメソッド __call() を実装した場合は、このメソッドをオーバーライドできます。

public boolean hasMethod ( $name )
$name 文字列

メソッド名

戻り値 boolean

メソッドが定義されているかどうか

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasOffset() protected メソッド

指定されたオフセットが有効かどうかを確認します。

protected boolean hasOffset ( $offset )
$offset mixed

指定されたオフセット

戻り値 boolean

オフセットが有効かどうか

                protected function hasOffset($offset)
{
    return ($offset instanceof ExpressionInterface) || ctype_digit((string)$offset) && (string)$offset !== '0';
}

            
hasProperty() public メソッド

定義場所: yii\base\BaseObject::hasProperty()

プロパティが定義されているかどうかを示す値を返します。

プロパティは、以下の場合に定義されます。

  • クラスが、指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合 (この場合、プロパティ名はケースインセンシティブです)。
  • クラスには、指定された名前のメンバー変数があります($checkVarsがtrueの場合)。

参考

public boolean hasProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars boolean

メンバー変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティが定義されているかどうか

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public メソッド

オブジェクトを初期化します。

このメソッドは、オブジェクトが指定された構成で初期化された後、コンストラクターの最後に呼び出されます。

public void init ( )

                public function init()
{
    parent::init();
    $this->expressionBuilders = array_merge($this->defaultExpressionBuilders(), $this->expressionBuilders);
    $this->conditionClasses = array_merge($this->defaultConditionClasses(), $this->conditionClasses);
}

            
insert() public メソッド

INSERT SQLステートメントを作成します。

例えば、`php $sql = $queryBuilder->insert('user', [

'name' => 'Sam',
'age' => 30,

], $params); ` このメソッドは、テーブル名とカラム名を適切にエスケープします。

public string insert ( $table, $columns, &$params )
$table 文字列

新しい行が挿入されるテーブル。

$columns array|yii\db\Query

テーブルに挿入されるカラムデータ(名前 => 値)、または INSERT INTO ... SELECT SQL ステートメントを実行するための Query のインスタンス。Query の引き渡しは、バージョン 2.0.11 から利用可能です。

$params 配列

このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。

戻り値 文字列

INSERT SQL

                public function insert($table, $columns, &$params)
{
    list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
    return 'INSERT INTO ' . $this->db->quoteTableName($table)
        . (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
        . (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
}

            
prepareInsertSelectSubQuery() protected メソッド (バージョン 2.0.11 から利用可能)

INSERT INTO ... SELECT SQLステートメントの select-subquery とフィールド名を準備します。

protected array prepareInsertSelectSubQuery ( $columns, $schema, $params = [] )
$columns yii\db\Query

SELECTクエリを表すオブジェクト。

$schema yii\db\Schema

カラム名を引用符で囲むためのスキーマオブジェクト。

$params 配列

生成された SQL ステートメントにバインドされるパラメータ。これらのパラメータは、クエリの構築プロセス中に生成された追加のパラメータとともに結果に含まれます。

戻り値 配列

カラム名、値、およびパラメータの配列。

例外 yii\base\InvalidArgumentException

クエリのselectに名前付きパラメータのみが含まれる場合。

                protected function prepareInsertSelectSubQuery($columns, $schema, $params = [])
{
    if (!is_array($columns->select) || empty($columns->select) || in_array('*', $columns->select)) {
        throw new InvalidArgumentException('Expected select query object with enumerated (named) parameters');
    }
    list($values, $params) = $this->build($columns, $params);
    $names = [];
    $values = ' ' . $values;
    foreach ($columns->select as $title => $field) {
        if (is_string($title)) {
            $names[] = $schema->quoteColumnName($title);
        } elseif (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $field, $matches)) {
            $names[] = $schema->quoteColumnName($matches[2]);
        } else {
            $names[] = $schema->quoteColumnName($field);
        }
    }
    return [$names, $values, $params];
}

            
prepareInsertValues() protected メソッド (バージョン 2.0.14 から利用可能)

INSERT SQLステートメントのVALUES部分を準備します。

protected array prepareInsertValues ( $table, $columns, $params = [] )
$table 文字列

新しい行が挿入されるテーブル。

$columns array|yii\db\Query

テーブルに挿入されるカラムデータ(name => value)またはINSERT INTO ... SELECT SQLステートメントを実行するためのQueryのインスタンス。

$params 配列

このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。

戻り値 配列

カラム名、プレースホルダー、値、およびパラメータの配列。

                protected function prepareInsertValues($table, $columns, $params = [])
{
    $schema = $this->db->getSchema();
    $tableSchema = $schema->getTableSchema($table);
    $columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
    $names = [];
    $placeholders = [];
    $values = ' DEFAULT VALUES';
    if ($columns instanceof Query) {
        list($names, $values, $params) = $this->prepareInsertSelectSubQuery($columns, $schema, $params);
    } else {
        foreach ($columns as $name => $value) {
            $names[] = $schema->quoteColumnName($name);
            $value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
            if ($value instanceof ExpressionInterface) {
                $placeholders[] = $this->buildExpression($value, $params);
            } elseif ($value instanceof \yii\db\Query) {
                list($sql, $params) = $this->build($value, $params);
                $placeholders[] = "($sql)";
            } else {
                $placeholders[] = $this->bindParam($value, $params);
            }
        }
    }
    return [$names, $placeholders, $values, $params];
}

            
prepareUpdateSets() protected メソッド (バージョン 2.0.14 から利用可能)

UPDATE SQLステートメントのSET部分を準備します。

protected array prepareUpdateSets ( $table, $columns, $params = [] )
$table 文字列

更新されるテーブル。

$columns 配列

更新されるカラムデータ(name => value)。

$params 配列

このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。

戻り値 配列

UPDATE SQLステートメント用のSET部分(最初の配列要素)とパラメータ(2番目の配列要素)の配列。

                protected function prepareUpdateSets($table, $columns, $params = [])
{
    $tableSchema = $this->db->getTableSchema($table);
    $columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
    $sets = [];
    foreach ($columns as $name => $value) {
        $value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
        if ($value instanceof ExpressionInterface) {
            $placeholder = $this->buildExpression($value, $params);
        } else {
            $placeholder = $this->bindParam($value, $params);
        }
        $sets[] = $this->db->quoteColumnName($name) . '=' . $placeholder;
    }
    return [$sets, $params];
}

            
prepareUpsertColumns() protected メソッド (バージョン 2.0.14 から利用可能)

protected array prepareUpsertColumns ( $table, $insertColumns, $updateColumns, &$constraints = [] )
$table 文字列
$insertColumns array|yii\db\Query
$updateColumns array|boolean
$constraints yii\db\Constraint[]

このパラメータは、一致した制約リストを受け取ります。制約はカラム名で一意になります。

                protected function prepareUpsertColumns($table, $insertColumns, $updateColumns, &$constraints = [])
{
    if ($insertColumns instanceof Query) {
        list($insertNames) = $this->prepareInsertSelectSubQuery($insertColumns, $this->db->getSchema());
    } else {
        $insertNames = array_map([$this->db, 'quoteColumnName'], array_keys($insertColumns));
    }
    $uniqueNames = $this->getTableUniqueColumnNames($table, $insertNames, $constraints);
    $uniqueNames = array_map([$this->db, 'quoteColumnName'], $uniqueNames);
    if ($updateColumns !== true) {
        return [$uniqueNames, $insertNames, null];
    }
    return [$uniqueNames, $insertNames, array_diff($insertNames, $uniqueNames)];
}

            
renameColumn() public メソッド

カラムの名前を変更するためのSQLステートメントを構築します。

public string renameColumn ( $table, $oldName, $newName )
$table 文字列

カラムの名前が変更されるテーブル。名前はメソッドによって適切に引用符で囲まれます。

$oldName 文字列

カラムの古い名前。名前はメソッドによって適切に引用符で囲まれます。

$newName 文字列

カラムの新しい名前。名前はメソッドによって適切に引用符で囲まれます。

戻り値 文字列

DBカラムの名前を変更するためのSQLステートメント。

                public function renameColumn($table, $oldName, $newName)
{
    return 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' RENAME COLUMN ' . $this->db->quoteColumnName($oldName)
        . ' TO ' . $this->db->quoteColumnName($newName);
}

            
renameTable() public メソッド

DBテーブルの名前を変更するためのSQLステートメントを構築します。

public string renameTable ( $oldName, $newName )
$oldName 文字列

名前が変更されるテーブル。名前はメソッドによって適切に引用符で囲まれます。

$newName 文字列

テーブルの新しい名前。名前はメソッドによって適切に引用符で囲まれます。

戻り値 文字列

DBテーブルの名前を変更するためのSQLステートメント。

                public function renameTable($oldName, $newName)
{
    return 'RENAME TABLE ' . $this->db->quoteTableName($oldName) . ' TO ' . $this->db->quoteTableName($newName);
}

            
resetSequence() public メソッド

テーブルの主キーのシーケンス値をリセットするためのSQLステートメントを作成します。

シーケンスは、次に挿入される新しい行の主キーが指定された値または既存の最大値+1になるようにリセットされます。

public string resetSequence ( $table, $value null )
$table 文字列

主キーシーケンスがリセットされるテーブルの名前

$value array|string|null

次に挿入される新しい行の主キーの値。これが設定されていない場合、次に新しい行の主キーは既存の最大値+1になります。

戻り値 文字列

シーケンスをリセットするためのSQLステートメント

例外 yii\base\NotSupportedException

これが基盤となるDBMSでサポートされていない場合

                public function resetSequence($table, $value = null)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support resetting sequence.');
}

            
selectExists() public メソッド (バージョン 2.0.8 から利用可能)

SELECT EXISTS() SQLステートメントを作成します。

public string selectExists ( $rawSql )
$rawSql 文字列

選択元の生の形式のサブクエリ。

戻り値 文字列

SELECT EXISTS() SQLステートメント。

                public function selectExists($rawSql)
{
    return 'SELECT EXISTS(' . $rawSql . ')';
}

            
setConditionClasses() public メソッド (バージョン 2.0.14.2 から利用可能)

$conditionClasses プロパティのセッター。

$conditionClasses も参照してください。

public void setConditionClasses ( $classes )
$classes 文字列[]

条件エイリアスから条件クラスへのマップ。例:

['LIKE' => yii\db\condition\LikeCondition::class]

                public function setConditionClasses($classes)
{
    $this->conditionClasses = array_merge($this->conditionClasses, $classes);
}

            
setExpressionBuilders() public メソッド (バージョン 2.0.14 から利用可能)

$expressionBuilders プロパティのセッター。

$expressionBuilders も参照してください。

public void setExpressionBuilders ( $builders )
$builders 文字列[]

$expressionBuildersプロパティで事前定義されたものとマージされるべきビルダーの配列。

                public function setExpressionBuilders($builders)
{
    $this->expressionBuilders = array_merge($this->expressionBuilders, $builders);
}

            
truncateTable() public メソッド

DBテーブルを切り捨てるためのSQLステートメントを構築します。

public string truncateTable ( $table )
$table 文字列

切り捨てられるテーブル。名前はメソッドによって適切に引用符で囲まれます。

戻り値 文字列

DBテーブルを切り捨てるためのSQLステートメント。

                public function truncateTable($table)
{
    return 'TRUNCATE TABLE ' . $this->db->quoteTableName($table);
}

            
update() public メソッド

UPDATE SQLステートメントを作成します。

例:

$params = [];
$sql = $queryBuilder->update('user', ['status' => 1], 'age > 30', $params);

このメソッドは、テーブル名とカラム名を適切にエスケープします。

public string update ( $table, $columns, $condition, &$params )
$table 文字列

更新されるテーブル。

$columns 配列

更新されるカラムデータ(name => value)。

$condition array|string

WHERE部分に配置される条件。条件の指定方法については、yii\db\Query::where()を参照してください。

$params 配列

このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。

戻り値 文字列

UPDATE SQL を生成します。

                public function update($table, $columns, $condition, &$params)
{
    list($lines, $params) = $this->prepareUpdateSets($table, $columns, $params);
    $sql = 'UPDATE ' . $this->db->quoteTableName($table) . ' SET ' . implode(', ', $lines);
    $where = $this->buildWhere($condition, $params);
    return $where === '' ? $sql : $sql . ' ' . $where;
}

            
upsert() public メソッド (バージョン 2.0.14 から利用可能)

データベーステーブルに、まだ存在しない(一意制約に一致する)行を挿入し、存在する場合は更新するSQLステートメントを作成します。

例:

$sql = $queryBuilder->upsert('pages', [
    'name' => 'Front page',
    'url' => 'https://example.com/', // url is unique
    'visits' => 0,
], [
    'visits' => new \yii\db\Expression('visits + 1'),
], $params);

このメソッドは、テーブル名とカラム名を適切にエスケープします。

public string upsert ( $table, $insertColumns, $updateColumns, &$params )
$table 文字列

新しい行が挿入/更新されるテーブル。

$insertColumns array|yii\db\Query

テーブルに挿入されるカラムデータ (name => value)。または、INSERT INTO ... SELECT SQL ステートメントを実行するための yii\db\Query のインスタンス。

$updateColumns array|boolean

カラムデータが既に存在する場合に更新されるカラムデータ (name => value)。true が渡された場合、カラムデータは挿入カラムデータに合わせて更新されます。false が渡された場合、カラムデータが既に存在する場合は更新は行われません。

$params 配列

このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。

戻り値 文字列

生成された SQL。

例外 yii\base\NotSupportedException

基盤となるDBMSでサポートされていない場合。

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    throw new NotSupportedException($this->db->getDriverName() . ' does not support upsert statements.');
}