0 フォロワー

クラス yii\db\mysql\QueryBuilder

継承yii\db\mysql\QueryBuilder » yii\db\QueryBuilder » yii\base\BaseObject
実装yii\base\Configurable
利用可能バージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/db/mysql/QueryBuilder.php

QueryBuilder は、MySQL データベースのクエリビルダーです。

公開プロパティ

継承されたプロパティを隠す

プロパティ 説明 定義元
$conditionBuilders array クエリ条件とビルダーメソッドのマッピング。 yii\db\QueryBuilder
$conditionClasses array 条件エイリアスと条件クラスのマッピング。 yii\db\QueryBuilder
$db yii\db\Connection データベース接続。 yii\db\QueryBuilder
$expressionBuilders string[]|yii\db\ExpressionBuilderInterface[] 式クラスと式ビルダークラスのマッピング。 yii\db\QueryBuilder
$separator string SQL文の異なるフラグメント間のセパレータ。 yii\db\QueryBuilder
$typeMap array 抽象的な列型(キー)から物理的な列型(値)へのマッピング。 yii\db\mysql\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\mysql\QueryBuilder
addColumn() 新しいDB列を追加するためのSQL文を構築します。 yii\db\QueryBuilder
addCommentOnColumn() 列にコメントを追加するためのSQLコマンドを構築します。 yii\db\mysql\QueryBuilder
addCommentOnTable() テーブルにコメントを追加するためのSQLコマンドを構築します。 yii\db\mysql\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を使用して$params配列に$valueを追加するためのヘルパーメソッド。 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\mysql\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" operator 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\mysql\QueryBuilder
className() このクラスの完全修飾名を返します。 yii\base\BaseObject
createConditionFromArray() yii\db\Query::where()で説明されている配列形式で定義された$conditionを、$conditionClassesマップに従ってyii\db\condition\ConditionInterfaceのインスタンスに変換します。 yii\db\QueryBuilder
createIndex() 新しいインデックスを作成するためのSQL文を構築します。 yii\db\mysql\QueryBuilder
createTable() 新しいDBテーブルを作成するためのSQL文を構築します。 yii\db\QueryBuilder
createView() SQLビューを作成します。 yii\db\QueryBuilder
delete() DELETE SQL文を作成します。 yii\db\QueryBuilder
dropCheck() チェック制約を削除するためのSQLコマンドを作成します。 yii\db\mysql\QueryBuilder
dropColumn() DB列を削除するためのSQL文を構築します。 yii\db\QueryBuilder
dropCommentFromColumn() 列にコメントを追加するためのSQLコマンドを構築します。 yii\db\mysql\QueryBuilder
dropCommentFromTable() テーブルにコメントを追加するためのSQLコマンドを構築します。 yii\db\mysql\QueryBuilder
dropDefaultValue() デフォルト値制約を削除するためのSQLコマンドを作成します。 yii\db\QueryBuilder
dropForeignKey() 外部キー制約を削除するためのSQL文を構築します。 yii\db\mysql\QueryBuilder
dropIndex() インデックスを削除するためのSQL文を構築します。 yii\db\QueryBuilder
dropPrimaryKey() 既存のテーブルから主キー制約を削除するためのSQL文を構築します。 yii\db\mysql\QueryBuilder
dropTable() DBテーブルを削除するためのSQL文を構築します。 yii\db\QueryBuilder
dropUnique() 一意制約を削除するためのSQLコマンドを作成します。 yii\db\mysql\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\mysql\QueryBuilder
insert() INSERT SQL文を作成します。 yii\db\QueryBuilder
renameColumn() 列の名前を変更するためのSQL文を構築します。 yii\db\mysql\QueryBuilder
renameTable() DBテーブルの名前を変更するためのSQL文を構築します。 yii\db\QueryBuilder
resetSequence() テーブルの主キーのシーケンス値をリセットするためのSQL文を作成します。 yii\db\mysql\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\mysql\QueryBuilder

保護されたメソッド

継承されたメソッドを隠す

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

定数

継承された定数を非表示

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

プロパティの詳細

継承されたプロパティを隠す

$typeMap public property

抽象的な列型(キー)から物理的な列型(値)へのマッピング。

public array $typeMap = [
    \
yii\db\mysql\Schema::TYPE_PK => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\mysql\Schema::TYPE_UPK => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\mysql\Schema::TYPE_BIGPK => 'bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\mysql\Schema::TYPE_UBIGPK => 'bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
    \
yii\db\mysql\Schema::TYPE_CHAR => 'char(1)',
    \
yii\db\mysql\Schema::TYPE_STRING => 'varchar(255)',
    \
yii\db\mysql\Schema::TYPE_TEXT => 'text',
    \
yii\db\mysql\Schema::TYPE_TINYINT => 'tinyint(3)',
    \
yii\db\mysql\Schema::TYPE_SMALLINT => 'smallint(6)',
    \
yii\db\mysql\Schema::TYPE_INTEGER => 'int(11)',
    \
yii\db\mysql\Schema::TYPE_BIGINT => 'bigint(20)',
    \
yii\db\mysql\Schema::TYPE_FLOAT => 'float',
    \
yii\db\mysql\Schema::TYPE_DOUBLE => 'double',
    \
yii\db\mysql\Schema::TYPE_DECIMAL => 'decimal(10,0)',
    \
yii\db\mysql\Schema::TYPE_DATE => 'date',
    \
yii\db\mysql\Schema::TYPE_BINARY => 'blob',
    \
yii\db\mysql\Schema::TYPE_BOOLEAN => 'tinyint(1)',
    \
yii\db\mysql\Schema::TYPE_MONEY => 'decimal(19,4)',
    \
yii\db\mysql\Schema::TYPE_JSON => 'json',
]

メソッドの詳細

継承されたメソッドを隠す

__call() public method

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

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

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

public 混合型 __call ( $name, $params )
$name string

メソッド名

$params array

メソッドパラメータ

戻り値 混合型

メソッドの戻り値

例外 yii\base\UnknownMethodException

未知のメソッド呼び出し時

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

            
__construct() public メソッド

定義位置: yii\db\QueryBuilder::__construct()

コンストラクタ。

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

データベース接続。

$config array

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

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

            
__get() public メソッド

定義位置: yii\base\BaseObject::__get()

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

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

こちらも参照してください __set().

public 混合型 __get ( $name )
$name string

プロパティ名

戻り値 混合型

プロパティ値

例外 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ではないかどうか)を確認します。

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

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

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

public boolean __isset ( $name )
$name string

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

戻り値 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()

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

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

こちらも参照してください __get().

public void __set ( $name, $value )
$name string

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

$value 混合型

プロパティ値

例外 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に設定します。

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

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

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

public void __unset ( $name )
$name string

プロパティ名

例外 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 string

チェック制約の名前。名前はメソッドによって適切に引用符で囲まれます。

$table string

チェック制約が追加されるテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

$expression string

CHECK制約のSQL。

戻り値 string

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

例外 yii\base\NotSupportedException

MySQLではサポートされていません。

                public function addCheck($name, $table, $expression)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by MySQL.');
}

            
addColumn() public メソッド

定義位置: yii\db\QueryBuilder::addColumn()

新しいDB列を追加するためのSQL文を構築します。

public string addColumn ( $table, $column, $type )
$table string

新しい列が追加されるテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

$column string

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

$type string

列の種類。getColumnType()メソッドは、抽象的な列の種類(もしあれば)を物理的な種類に変換するために呼び出されます。抽象的な種類として認識されないものは、生成されたSQLにそのまま保持されます。たとえば、「string」は「varchar(255)」に変換され、「string not null」は「varchar(255) not null」になります。

戻り値 string

新しい列を追加するための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 string

コメントを追加する列を持つテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

$column string

コメントを追加する列の名前。列名はメソッドによって適切に引用符で囲まれます。

$comment string

追加するコメントのテキスト。コメントはメソッドによって適切に引用符で囲まれます。

戻り値 string

列にコメントを追加するためのSQL文

                public function addCommentOnColumn($table, $column, $comment)
{
    // Strip existing comment which may include escaped quotes
    $definition = trim(preg_replace("/COMMENT '(?:''|[^'])*'/i", '', $this->getColumnDefinition($table, $column)));
    $checkRegex = '/CHECK *(\(([^()]|(?-2))*\))/';
    $check = preg_match($checkRegex, $definition, $checkMatches);
    if ($check === 1) {
        $definition = preg_replace($checkRegex, '', $definition);
    }
    $alterSql = 'ALTER TABLE ' . $this->db->quoteTableName($table)
        . ' CHANGE ' . $this->db->quoteColumnName($column)
        . ' ' . $this->db->quoteColumnName($column)
        . (empty($definition) ? '' : ' ' . $definition)
        . ' COMMENT ' . $this->db->quoteValue($comment);
    if ($check === 1) {
        $alterSql .= ' ' . $checkMatches[0];
    }
    return $alterSql;
}

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

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

public string addCommentOnTable ( $table, $comment )
$table string

コメントを追加する列を持つテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

$comment string

追加するコメントのテキスト。コメントはメソッドによって適切に引用符で囲まれます。

戻り値 string

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

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

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

定義先: yii\db\QueryBuilder::addDefaultValue()

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

public string addDefaultValue ( $name, $table, $column, $value )
$name string

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

$table string

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

$column string

制約を追加する列の名前。このメソッドによって適切にクォートされます。

$value 混合型

デフォルト値。

戻り値 string

既存のテーブルにデフォルト値制約を追加するための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 メソッド

定義先: yii\db\QueryBuilder::addForeignKey()

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

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

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

外部キー制約の名前。

$table string

外部キー制約を追加するテーブル。

$columns string|array

制約を追加する列の名前。複数の列がある場合は、コンマで区切るか、配列を使用して指定します。

$refTable string

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

$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をサポートしています。

戻り値 string

既存のテーブルに外部キー制約を追加するための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 メソッド

定義先: yii\db\QueryBuilder::addPrimaryKey()

既存のテーブルに主キー制約を追加するためのSQL文を構築します。

public string addPrimaryKey ( $name, $table, $columns )
$name string

主キー制約の名前。

$table string

主キー制約を追加するテーブル。

$columns string|array

主キーを構成する列名をコンマ区切り文字列または配列で指定します。

戻り値 string

既存のテーブルに主キー制約を追加するための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 から利用可能)

定義先: yii\db\QueryBuilder::addUnique()

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

public string addUnique ( $name, $table, $columns )
$name string

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

$table string

一意制約を追加するテーブル。このメソッドによって適切にクォートされます。

$columns string|array

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

戻り値 string

既存のテーブルに一意制約を追加するための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 メソッド

定義先: yii\db\QueryBuilder::alterColumn()

列の定義を変更するためのSQL文を構築します。

public string alterColumn ( $table, $column, $type )
$table string

変更する列を持つテーブル。テーブル名は、このメソッドによって適切にクォートされます。

$column string

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

$type string

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

戻り値 string

列の定義を変更するための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 メソッド

定義先: yii\db\QueryBuilder::batchInsert()

バッチINSERT SQL文を生成します。

例えば、

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

各行の値は、対応する列名と一致する必要があります。

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

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

新しい行を挿入するテーブル。

$columns array

列名

$rows array|Generator

テーブルに一括挿入する行

$params array

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

戻り値 string

一括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 から利用可能)

定義先: yii\db\QueryBuilder::bindParam()

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

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

参照渡し

戻り値 string

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

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

            
build() public メソッド

定義先: yii\db\QueryBuilder::build()

yii\db\QueryオブジェクトからSELECT SQL文を生成します。

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

SQL文が生成されるyii\db\Queryオブジェクト。

$params array

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

戻り値 array

生成された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() を使用してください。

定義先: yii\db\QueryBuilder::buildAndCondition()

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

public string buildAndCondition ( $operator, $operands, &$params )
$operator string

オペランドを連結するために使用する演算子

$operands array

連結するSQL式。

$params array

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

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

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

定義先: yii\db\QueryBuilder::buildBetweenCondition()

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

public string buildBetweenCondition ( $operator, $operands, &$params )
$operator string

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

$operands array

最初のオペランドは列名です。2番目と3番目のオペランドは、列の値が存在するべき範囲を記述します。

$params array

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

例外 yii\base\InvalidArgumentException

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

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

            
buildColumns() publicメソッド

定義先: yii\db\QueryBuilder::buildColumns()

列を処理し、必要に応じて適切に引用符で囲みます。

すべての列をカンマで区切った文字列に連結します。

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

処理対象の列

戻り値 string

処理結果

                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メソッド

定義先: yii\db\QueryBuilder::buildCondition()

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

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

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

$params array

設定されるバインディングパラメータ

戻り値 string

生成された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() を使用してください。

定義先: yii\db\QueryBuilder::buildExistsCondition()

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

public string buildExistsCondition ( $operator, $operands, &$params )
$operator string

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

$operands array

サブクエリを表すyii\db\Queryオブジェクトを1つだけ含みます。

$params array

設定されるバインディングパラメータ

戻り値 string

生成された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から利用可能)
public string buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] )
$expression yii\db\ExpressionInterface

構築する式

$params array

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

戻り値 string

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 array
$params array

設定されるバインディングパラメータ

戻り値 string

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 array
戻り値 string

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() を使用してください。

定義先: yii\db\QueryBuilder::buildHashCondition()

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

public string buildHashCondition ( $condition, &$params )
$condition array

条件の指定。

$params array

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

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

            
buildHaving() publicメソッド
public string buildHaving ( $condition, &$params )
$condition string|array
$params array

設定されるバインディングパラメータ

戻り値 string

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() を使用してください。

定義先: yii\db\QueryBuilder::buildInCondition()

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

public string buildInCondition ( $operator, $operands, &$params )
$operator string

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

$operands array

最初のオペランドは列名です。配列の場合は、複合IN条件が生成されます。2番目のオペランドは、列の値が存在するべき値の配列です。空配列の場合は、演算子がINであればfalseNOT INであれば空の式が生成されます。

$params array

設定されるバインディングパラメータ

戻り値 string

生成された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 array
$params array

設定されるバインディングパラメータ

戻り値 string

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() を使用してください。

定義されている場所: yii\db\QueryBuilder::buildLikeCondition()

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

public string buildLikeCondition ( $operator, $operands, &$params )
$operator string

使用する演算子(例:LIKENOT LIKEOR LIKEOR NOT LIKE

$operands array

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

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

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

例外 yii\base\InvalidArgumentException

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

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

            
buildLimit() publicメソッド

public string buildLimit ( $limit, $offset )
$limit 整数
$offset 整数
戻り値 string

LIMIT句とOFFSET句

                public function buildLimit($limit, $offset)
{
    $sql = '';
    if ($this->hasLimit($limit)) {
        $sql = 'LIMIT ' . $limit;
        if ($this->hasOffset($offset)) {
            $sql .= ' OFFSET ' . $offset;
        }
    } elseif ($this->hasOffset($offset)) {
        // limit is not optional in MySQL
        // https://stackoverflow.com/questions/255517/mysql-offset-infinite-rows/271650#271650
        // https://dev.mysql.com/doc/refman/5.7/en/select.html#idm46193796386608
        $sql = "LIMIT $offset, 18446744073709551615"; // 2^64-1
    }
    return $sql;
}

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

定義されている場所: yii\db\QueryBuilder::buildNotCondition()

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

public string buildNotCondition ( $operator, $operands, &$params )
$operator string

オペランドを連結するために使用する演算子

$operands array

連結するSQL式。

$params array

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

例外 yii\base\InvalidArgumentException

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

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

            
buildOrderBy() publicメソッド

定義されている場所: yii\db\QueryBuilder::buildOrderBy()

public string buildOrderBy ( $columns )
$columns array
戻り値 string

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メソッド

定義されている場所: yii\db\QueryBuilder::buildOrderByAndLimit()

ORDER BY句とLIMIT/OFFSET句を構築し、指定されたSQLに追加します。

public string buildOrderByAndLimit ( $sql, $orderBy, $limit, $offset )
$sql string

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

$orderBy array

順序付けを行う列。このパラメータの指定方法の詳細については、yii\db\Query::orderBy()を参照してください。

$limit 整数

制限数。yii\db\Query::limit()を参照してください。

$offset 整数

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

戻り値 string

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メソッド

定義されている場所: yii\db\QueryBuilder::buildSelect()

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

設定されるバインディングパラメータ

$distinct boolean
$selectOption string|null
戻り値 string

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メソッド
2.0.14 から非推奨。代わりに buildCondition() を使用してください。

定義されている場所: yii\db\QueryBuilder::buildSimpleCondition()

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

public string buildSimpleCondition ( $operator, $operands, &$params )
$operator string

使用する演算子。何でも使用できます(例:><=など)。

$operands array

2つの列名を含みます。

$params array

設定されるバインディングパラメータ

戻り値 string

生成されたSQL式

例外 yii\base\InvalidArgumentException

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

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

            
buildUnion() publicメソッド

定義されている場所: yii\db\QueryBuilder::buildUnion()

public string buildUnion ( $unions, &$params )
$unions array
$params array

設定されるバインディングパラメータ

戻り値 string

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メソッド

定義されている場所: yii\db\QueryBuilder::buildWhere()

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

設定されるバインディングパラメータ

戻り値 string

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

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

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

定義されている場所: yii\db\QueryBuilder::buildWithQueries()

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

public string buildWithQueries ( $withs, &$params )
$withs array

各WITHクエリの設定

$params array

設定されるバインディングパラメータ

戻り値 string

ネストされたクエリを含むクエリの前処理済み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メソッド

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

プロパティを読み取ることができるかどうかを示す値を返します。

プロパティは、以下の場合に読み取り可能です。

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

こちらも参照してください canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

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

戻り値 boolean

プロパティが読み取り可能かどうか

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

            
canSetProperty() publicメソッド

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

プロパティを設定できるかどうかを示す値を返します。

プロパティは、以下の場合に書き込み可能です。

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

こちらも参照してください canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

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

戻り値 boolean

プロパティが書き込み可能かどうか

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

            
checkIntegrity() publicメソッド

整合性チェックを有効または無効にするためのSQL文を構築します。

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

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

$schema string

テーブルのスキーマ。MySQLでは意味を持たない。

$table string

テーブル名。MySQLでは意味を持たない。

戻り値 string

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

                public function checkIntegrity($check = true, $schema = '', $table = '')
{
    return 'SET FOREIGN_KEY_CHECKS = ' . ($check ? 1 : 0);
}

            
className() public staticメソッド
2.0.14以降非推奨。PHP >= 5.5では、代わりに::classを使用してください。

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

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

public static string className ( )
戻り値 string

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

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

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

定義場所: yii\db\QueryBuilder::createConditionFromArray()

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メソッド

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

こちらも参照してください https://bugs.mysql.com/bug.php?id=48875.

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

インデックス名。メソッドによって適切に引用符で囲まれます。

$table string

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

$columns string|array

インデックスに含める列。複数の列がある場合は、コンマで区切る、または配列を使用して指定します。各列名は、名前に括弧がない限り、メソッドによって適切に引用符で囲まれます。

$unique boolean

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

戻り値 string

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

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

            
createTable() publicメソッド

定義場所: yii\db\QueryBuilder::createTable()

新しい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 string

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

$columns array

新しいテーブルの列(name => definition)。

$options string|null

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

戻り値 string

新しい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メソッド (バージョン2.0.14から利用可能)

定義場所: yii\db\QueryBuilder::createView()

SQLビューを作成します。

public string createView ( $viewName, $subQuery )
$viewName string

作成するビューの名前。

$subQuery string|yii\db\Query

ビューを定義するSELECT文。文字列またはyii\db\Queryオブジェクトのいずれかです。

戻り値 string

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メソッド (バージョン2.0.14から利用可能)

定義場所: yii\db\QueryBuilder::defaultConditionClasses()

デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。$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メソッド (バージョン2.0.14から利用可能)

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

protected array defaultExpressionBuilders ( )

                protected function defaultExpressionBuilders()
{
    return array_merge(parent::defaultExpressionBuilders(), [
        'yii\db\JsonExpression' => 'yii\db\mysql\JsonExpressionBuilder',
    ]);
}

            
delete() publicメソッド

定義場所: yii\db\QueryBuilder::delete()

DELETE SQL文を作成します。

例えば、

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

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

public string delete ( $table, $condition, &$params )
$table string

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

$condition array|string

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

$params array

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

戻り値 string

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メソッド (バージョン2.0.13から利用可能)

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

public string dropCheck ( $name, $table )
$name string

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

$table string

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

戻り値 string

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

例外 yii\base\NotSupportedException

MySQLではサポートされていません。

                public function dropCheck($name, $table)
{
    throw new NotSupportedException(__METHOD__ . ' is not supported by MySQL.');
}

            
dropColumn() publicメソッド

定義場所: yii\db\QueryBuilder::dropColumn()

DB列を削除するためのSQL文を構築します。

public string dropColumn ( $table, $column )
$table string

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

$column string

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

戻り値 string

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 string

コメントを追加する列を持つテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

$column string

コメントを追加する列の名前。列名はメソッドによって適切に引用符で囲まれます。

戻り値 string

列にコメントを追加するためのSQL文

                public function dropCommentFromColumn($table, $column)
{
    return $this->addCommentOnColumn($table, $column, '');
}

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

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

public string dropCommentFromTable ( $table )
$table string

コメントを追加する列を持つテーブル。テーブル名はメソッドによって適切に引用符で囲まれます。

戻り値 string

列にコメントを追加するためのSQL文

                public function dropCommentFromTable($table)
{
    return $this->addCommentOnTable($table, '');
}

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

定義場所: yii\db\QueryBuilder::dropDefaultValue()

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

public string dropDefaultValue ( $name, $table )
$name string

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

$table string

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

戻り値 string

デフォルト値制約を削除する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 string

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

$table string

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

戻り値 string

外部キー制約を削除するSQL文。

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

            
dropIndex() publicメソッド

定義場所: yii\db\QueryBuilder::dropIndex()

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

public string dropIndex ( $name, $table )
$name string

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

$table string

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

戻り値 string

インデックスを削除する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 string

削除するプライマリキー制約の名前。

$table string

プライマリキー制約を削除するテーブル。

戻り値 string

既存のテーブルからプライマリキー制約を削除するSQL文。

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

            
dropTable() publicメソッド

定義場所: yii\db\QueryBuilder::dropTable()

DBテーブルを削除するためのSQL文を構築します。

public string dropTable ( $table )
$table string

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

戻り値 string

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 string

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

$table string

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

戻り値 string

ユニーク制約を削除するためのSQL文。

                public function dropUnique($name, $table)
{
    return $this->dropIndex($name, $table);
}

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

定義済み: yii\db\QueryBuilder::dropView()

SQLビューを削除します。

public string dropView ( $viewName )
$viewName string

削除するビューの名前。

戻り値 string

DROP VIEW SQL文。

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

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

定義済み: yii\db\QueryBuilder::executeResetSequence()

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

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

public void executeResetSequence ( $table, $value null )
$table string

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

$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から利用可能)

定義済み: yii\db\QueryBuilder::extractAlias()

テーブルエイリアスが存在する場合はそれを抽出するか、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メソッド

定義済み: yii\db\QueryBuilder::getColumnType()

抽象的な列の型を物理的な列の型に変換します。

$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: 小さい整数型。 "smallint(6)"に変換されます。
  • integer: 整数型。 "int(11)"に変換されます。
  • bigint: 大きい整数型。 "bigint(20)"に変換されます。
  • boolean: ブール型。 "tinyint(1)"に変換されます。
  • float`: 浮動小数点数型。 "float"に変換されます。
  • decimal: 10進数型。 "decimal"に変換されます。
  • datetime: 日時型。 "datetime"に変換されます。
  • timestamp: タイムスタンプ型。 "timestamp"に変換されます。
  • time: 時間型。 "time"に変換されます。
  • date: 日付型。 "date"に変換されます。
  • money: 金額型。 "decimal(19,4)"に変換されます。
  • 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

抽象的な列型。

戻り値 string

物理的な列型。

                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から利用可能)

定義済み: yii\db\QueryBuilder::getExpressionBuilder()

`$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メソッド

与えられたlimitが有効かどうかを確認します。

protected boolean hasLimit ( $limit )
$limit 混合型

与えられたlimit。

戻り値 boolean

limitが有効かどうか。

                protected function hasLimit($limit)
{
    // In MySQL limit argument must be nonnegative integer constant
    return ctype_digit((string) $limit);
}

            
hasMethod() publicメソッド

定義済み: yii\base\BaseObject::hasMethod()

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

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

public boolean hasMethod ( $name )
$name string

メソッド名

戻り値 boolean

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

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

            
hasOffset() protectedメソッド

与えられたoffsetが有効かどうかを確認します。

protected boolean hasOffset ( $offset )
$offset 混合型

指定されたオフセット

戻り値 boolean

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

                protected function hasOffset($offset)
{
    // In MySQL offset argument must be nonnegative integer constant
    $offset = (string) $offset;
    return ctype_digit($offset) && $offset !== '0';
}

            
hasProperty() publicメソッド

定義されている場所: yii\base\BaseObject::hasProperty()

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

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

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

参照

public boolean hasProperty ( $name, $checkVars true )
$name string

プロパティ名

$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->typeMap = array_merge($this->typeMap, $this->defaultTimeTypeMap());
}

            
insert() publicメソッド

定義されている場所: yii\db\QueryBuilder::insert()

INSERT SQL文を作成します。

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

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

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

public string insert ( $table, $columns, &$params )
$table string

新しい行を挿入するテーブル。

$columns array|yii\db\Query

テーブルに挿入するカラムデータ(name => value)、またはINSERT INTO ... SELECT SQL文を実行するためのQueryのインスタンス。 Queryの引渡しは、バージョン2.0.11以降で利用可能です。

$params array

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

戻り値 string

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以降で利用可能)

定義されている場所: yii\db\QueryBuilder::prepareInsertSelectSubQuery()

INSERT INTO ... SELECT SQL文のためのselect-subqueryとフィールド名を準備します。

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

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

$schema yii\db\Schema

カラム名をクォートするためのスキーマオブジェクト。

$params array

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

戻り値 array

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

例外 yii\base\InvalidArgumentException

クエリが名前付きパラメータのみを含まない場合。

                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 string

新しい行を挿入するテーブル。

$columns array|yii\db\Query

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

$params array

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

戻り値 array

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

                protected function prepareInsertValues($table, $columns, $params = [])
{
    list($names, $placeholders, $values, $params) = parent::prepareInsertValues($table, $columns, $params);
    if (!$columns instanceof Query && empty($names)) {
        $tableSchema = $this->db->getSchema()->getTableSchema($table);
        if ($tableSchema !== null) {
            if (!empty($tableSchema->primaryKey)) {
                $columns = $tableSchema->primaryKey;
                $defaultValue = 'NULL';
            } else {
                $columns = [reset($tableSchema->columns)->name];
                $defaultValue = 'DEFAULT';
            }
            foreach ($columns as $name) {
                $names[] = $this->db->quoteColumnName($name);
                $placeholders[] = $defaultValue;
            }
        }
    }
    return [$names, $placeholders, $values, $params];
}

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

定義されている場所: yii\db\QueryBuilder::prepareUpdateSets()

UPDATE SQL文のSET部分を準備します。

protected array prepareUpdateSets ( $table, $columns, $params = [] )
$table string

更新するテーブル。

$columns array

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

$params array

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

戻り値 array

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以降で利用可能)

定義されている場所: yii\db\QueryBuilder::prepareUpsertColumns()

protected array prepareUpsertColumns ( $table, $insertColumns, $updateColumns, &$constraints = [] )
$table string
$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 string

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

$oldName string

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

$newName string

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

戻り値 string

DBカラムの名前を変更するためのSQL文。

例外 yii\db\Exception

                public function renameColumn($table, $oldName, $newName)
{
    $quotedTable = $this->db->quoteTableName($table);
    $row = $this->db->createCommand('SHOW CREATE TABLE ' . $quotedTable)->queryOne();
    if ($row === false) {
        throw new Exception("Unable to find column '$oldName' in table '$table'.");
    }
    if (isset($row['Create Table'])) {
        $sql = $row['Create Table'];
    } else {
        $row = array_values($row);
        $sql = $row[1];
    }
    if (preg_match_all('/^\s*[`"](.*?)[`"]\s+(.*?),?$/m', $sql, $matches)) {
        foreach ($matches[1] as $i => $c) {
            if ($c === $oldName) {
                return "ALTER TABLE $quotedTable CHANGE "
                    . $this->db->quoteColumnName($oldName) . ' '
                    . $this->db->quoteColumnName($newName) . ' '
                    . $matches[2][$i];
            }
        }
    }
    // try to give back a SQL anyway
    return "ALTER TABLE $quotedTable CHANGE "
        . $this->db->quoteColumnName($oldName) . ' '
        . $this->db->quoteColumnName($newName);
}

            
renameTable() publicメソッド

定義されている場所: yii\db\QueryBuilder::renameTable()

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

public string renameTable ( $oldName, $newName )
$oldName string

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

$newName string

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

戻り値 string

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 ( $tableName, $value null )
$tableName string

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

$value 混合型

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

戻り値 string

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

例外 yii\base\InvalidArgumentException

テーブルが存在しない場合、またはテーブルに関連付けられたシーケンスがない場合。

                public function resetSequence($tableName, $value = null)
{
    $table = $this->db->getTableSchema($tableName);
    if ($table !== null && $table->sequenceName !== null) {
        $tableName = $this->db->quoteTableName($tableName);
        if ($value === null) {
            $key = reset($table->primaryKey);
            $value = $this->db->createCommand("SELECT MAX(`$key`) FROM $tableName")->queryScalar() + 1;
        } else {
            $value = (int) $value;
        }
        return "ALTER TABLE $tableName AUTO_INCREMENT=$value";
    } elseif ($table === null) {
        throw new InvalidArgumentException("Table not found: $tableName");
    }
    throw new InvalidArgumentException("There is no sequence associated with table '$tableName'.");
}

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

定義されている場所: yii\db\QueryBuilder::selectExists()

SELECT EXISTS() SQL文を作成します。

public string selectExists ( $rawSql )
$rawSql string

raw形式のサブクエリ。ここから選択します。

戻り値 string

SELECT EXISTS() SQL文。

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

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

定義されている場所: yii\db\QueryBuilder::setConditionClasses()

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

こちらも参照してください $conditionClasses.

public void setConditionClasses ( $classes )
$classes string[]

条件のエイリアスと条件クラスのマップ。例えば

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

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

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

定義されている場所: yii\db\QueryBuilder::setExpressionBuilders()

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

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

public void setExpressionBuilders ( $builders )
$builders string[]

$expressionBuilders プロパティで事前に定義されているものとマージする必要があるビルダーの配列。

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

            
truncateTable() publicメソッド

定義されている場所: yii\db\QueryBuilder::truncateTable()

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

public string truncateTable ( $table )
$table string

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

戻り値 string

DBテーブルを切り捨てるためのSQL文。

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

            
update() publicメソッド

定義されている場所: yii\db\QueryBuilder::update()

UPDATE SQL文を作成します。

例えば、

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

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

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

更新するテーブル。

$columns array

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

$condition array|string

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

$params array

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

戻り値 string

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);

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

こちらも参照してください https://downloads.mysql.com/docs/refman-5.1-en.pdf.

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

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

$insertColumns array|yii\db\Query

テーブルに挿入する列データ (名前 => 値)、またはINSERT INTO ... SELECT SQL文を実行するyii\db\Queryのインスタンス。

$updateColumns array|boolean

列データが既に存在する場合に更新する列データ (名前 => 値)。trueが渡された場合、列データは挿入列データと一致するように更新されます。falseが渡された場合、列データが既に存在する場合は更新されません。

$params array

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

戻り値 string

結果のSQL。

例外 yii\base\NotSupportedException

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

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    $insertSql = $this->insert($table, $insertColumns, $params);
    list($uniqueNames, , $updateNames) = $this->prepareUpsertColumns($table, $insertColumns, $updateColumns);
    if (empty($uniqueNames)) {
        return $insertSql;
    }
    if ($updateNames === []) {
        // there are no columns to update
        $updateColumns = false;
    }
    if ($updateColumns === true) {
        $updateColumns = [];
        foreach ($updateNames as $name) {
            $updateColumns[$name] = new Expression('VALUES(' . $this->db->quoteColumnName($name) . ')');
        }
    } elseif ($updateColumns === false) {
        $name = $this->db->quoteColumnName(reset($uniqueNames));
        $updateColumns = [$name => new Expression($this->db->quoteTableName($table) . '.' . $name)];
    }
    list($updates, $params) = $this->prepareUpdateSets($table, $updateColumns, $params);
    return $insertSql . ' ON DUPLICATE KEY UPDATE ' . implode(', ', $updates);
}