0 フォロワー

クラス yii\db\oci\QueryBuilder

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

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

公開プロパティ

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

プロパティ 説明 定義元
$conditionBuilders 配列 クエリ条件からビルダーメソッドへのマップ。 yii\db\QueryBuilder
$conditionClasses 配列 条件エイリアスから条件クラスへのマップ。 yii\db\QueryBuilder
$db yii\db\Connection データベース接続。 yii\db\QueryBuilder
$expressionBuilders string[]|yii\db\ExpressionBuilderInterface[] 式クラスを式ビルダー クラスにマップします。 yii\db\QueryBuilder
$separator 文字列 SQLステートメントの異なるフラグメント間の区切り文字。 yii\db\QueryBuilder
$typeMap 配列 抽象的なカラム型(キー)から物理的なカラム型(値)へのマッピング。 yii\db\oci\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\oci\QueryBuilder
addPrimaryKey() 既存のテーブルに主キー制約を追加するためのSQLステートメントを構築します。 yii\db\QueryBuilder
addUnique() 既存のテーブルに一意制約を追加するためのSQLコマンドを作成します。 yii\db\QueryBuilder
alterColumn() カラムの定義を変更するためのSQLステートメントを構築します。 yii\db\oci\QueryBuilder
batchInsert() バッチINSERT SQLステートメントを生成します。 yii\db\oci\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\oci\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\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\oci\QueryBuilder
dropCommentFromTable() テーブルにコメントを追加するためのSQLコマンドを構築します。 yii\db\oci\QueryBuilder
dropDefaultValue() デフォルト値制約を削除するためのSQLコマンドを作成します。 yii\db\QueryBuilder
dropForeignKey() 外部キー制約を削除するためのSQLステートメントを構築します。 yii\db\QueryBuilder
dropIndex() インデックスを削除するためのSQLステートメントを構築します。 yii\db\oci\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\oci\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\oci\QueryBuilder
resetSequence() テーブルの主キーのシーケンス値をリセットするためのSQLステートメントを作成します。 yii\db\QueryBuilder
selectExists() SELECT EXISTS() SQLステートメントを作成します。 yii\db\oci\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\oci\QueryBuilder

保護されたメソッド

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

メソッド 説明 定義元
defaultConditionClasses() デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。詳しくは、$conditionClasses のドキュメントを参照してください。 yii\db\QueryBuilder
defaultExpressionBuilders() デフォルトの式ビルダーの配列を含みます。このクエリビルダーのデフォルトの式ビルダーを変更したい場合は、このメソッドを拡張してオーバーライドしてください。詳しくは、$expressionBuilders のドキュメントを参照してください。 yii\db\oci\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\oci\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\oci\Schema::TYPE_PK => 'NUMBER(10) NOT NULL PRIMARY KEY',
    \
yii\db\oci\Schema::TYPE_UPK => 'NUMBER(10) UNSIGNED NOT NULL PRIMARY KEY',
    \
yii\db\oci\Schema::TYPE_BIGPK => 'NUMBER(20) NOT NULL PRIMARY KEY',
    \
yii\db\oci\Schema::TYPE_UBIGPK => 'NUMBER(20) UNSIGNED NOT NULL PRIMARY KEY',
    \
yii\db\oci\Schema::TYPE_CHAR => 'CHAR(1)',
    \
yii\db\oci\Schema::TYPE_STRING => 'VARCHAR2(255)',
    \
yii\db\oci\Schema::TYPE_TEXT => 'CLOB',
    \
yii\db\oci\Schema::TYPE_TINYINT => 'NUMBER(3)',
    \
yii\db\oci\Schema::TYPE_SMALLINT => 'NUMBER(5)',
    \
yii\db\oci\Schema::TYPE_INTEGER => 'NUMBER(10)',
    \
yii\db\oci\Schema::TYPE_BIGINT => 'NUMBER(20)',
    \
yii\db\oci\Schema::TYPE_FLOAT => 'NUMBER',
    \
yii\db\oci\Schema::TYPE_DOUBLE => 'NUMBER',
    \
yii\db\oci\Schema::TYPE_DECIMAL => 'NUMBER',
    \
yii\db\oci\Schema::TYPE_DATETIME => 'TIMESTAMP',
    \
yii\db\oci\Schema::TYPE_TIMESTAMP => 'TIMESTAMP',
    \
yii\db\oci\Schema::TYPE_TIME => 'TIMESTAMP',
    \
yii\db\oci\Schema::TYPE_DATE => 'DATE',
    \
yii\db\oci\Schema::TYPE_BINARY => 'BLOB',
    \
yii\db\oci\Schema::TYPE_BOOLEAN => 'NUMBER(1)',
    \
yii\db\oci\Schema::TYPE_MONEY => 'NUMBER(19,4)',
]

メソッドの詳細

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

__call() public method

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

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

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

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

メソッド名

$params 配列

メソッドのパラメータ

return mixed

メソッドの戻り値

throws 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 配列

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

                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 文字列

プロパティ名

return mixed

プロパティ値

throws yii\base\UnknownPropertyException

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

throws 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 文字列

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

return 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

プロパティ値

throws yii\base\UnknownPropertyException

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

throws 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 文字列

プロパティ名

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

定義元: yii\db\QueryBuilder::addCheck()

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

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

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

$table 文字列

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

$expression 文字列

CHECK 制約の SQL。

return 文字列

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

定義元: yii\db\QueryBuilder::addColumn()

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

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

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

$column 文字列

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

$type 文字列

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

return 文字列

新しい列を追加するための 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 以降で利用可能)

定義元: yii\db\QueryBuilder::addCommentOnColumn()

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

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

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

$column 文字列

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

$comment 文字列

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

return 文字列

列にコメントを追加するための 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 以降で利用可能)

定義元: yii\db\QueryBuilder::addCommentOnTable()

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

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

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

$comment 文字列

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

return 文字列

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

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

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

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

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

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

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

$table 文字列

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

$column 文字列

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

$value mixed

デフォルト値。

return 文字列

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

throws 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 のオプションをサポートしています。

return 文字列

既存のテーブルに外部キー制約を追加するための 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) {
        throw new Exception('Oracle does not support ON UPDATE clause.');
    }
    return $sql;
}

            
addPrimaryKey() public メソッド

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

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

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

主キー制約の名前。

$table 文字列

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

$columns string|array

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

return 文字列

既存のテーブルに主キー制約を追加するための 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 文字列

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

$table 文字列

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

$columns string|array

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

return 文字列

既存のテーブルにユニーク制約を追加するための 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' になります。

return 文字列

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

                public function alterColumn($table, $column, $type)
{
    $type = $this->getColumnType($type);
    return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' MODIFY ' . $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
return 文字列

一括 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);
    }
    $tableAndColumns = ' INTO ' . $schema->quoteTableName($table)
    . ' (' . implode(', ', $columns) . ') VALUES ';
    return 'INSERT ALL ' . $tableAndColumns . implode($tableAndColumns, $values) . ' SELECT 1 FROM SYS.DUAL';
}

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

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

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

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

参照渡し

return 文字列

$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 配列

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

return 配列

生成された 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 文字列

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

$operands 配列

接続する SQL 式。

$params 配列

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

return 文字列

生成された 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 文字列

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

$operands 配列

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

$params 配列

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

return 文字列

生成された SQL 式

throws 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

処理対象のカラム

return 文字列

処理結果

                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 配列

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

return 文字列

生成された 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 文字列

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

$operands 配列

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

$params 配列

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

return 文字列

生成された SQL 式

throws 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 配列

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

return 文字列

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

throws 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 配列

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

return 文字列

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 配列
return 文字列

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 配列

条件の指定。

$params 配列

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

return 文字列

生成された SQL 式

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

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

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

return 文字列

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 文字列

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

$operands 配列

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

$params 配列

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

return 文字列

生成された SQL 式

throws 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 配列

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

return 文字列

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

throws 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 文字列

使用する演算子 (例: LIKE, NOT LIKE, OR LIKE, OR NOT LIKE)

$operands 配列

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

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

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

return 文字列

生成された SQL 式

throws 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 整数
return 文字列

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

定義元: yii\db\QueryBuilder::buildNotCondition()

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

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

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

$operands 配列

接続する SQL 式。

$params 配列

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

return 文字列

生成された SQL 式

throws yii\base\InvalidArgumentException

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

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

            
buildOrderBy() public メソッド
public string buildOrderBy ( $columns )
$columns 配列
return 文字列

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

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

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

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

$orderBy 配列

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

$limit 整数

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

$offset 整数

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

return 文字列

ORDER BY/LIMIT/OFFSET(存在する場合)が追加されたSQL

                public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
    $orderBy = $this->buildOrderBy($orderBy);
    if ($orderBy !== '') {
        $sql .= $this->separator . $orderBy;
    }
    $filters = [];
    if ($this->hasOffset($offset)) {
        $filters[] = 'rowNumId > ' . $offset;
    }
    if ($this->hasLimit($limit)) {
        $filters[] = 'rownum <= ' . $limit;
    }
    if (empty($filters)) {
        return $sql;
    }
    $filter = implode(' AND ', $filters);
    return <<<EOD
 USER_SQL AS ($sql),
PAGINATION AS (SELECT USER_SQL.*, rownum as rowNumId FROM USER_SQL)
CT *
 PAGINATION
E $filter

}

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

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

$distinct boolean
$selectOption string|null
return 文字列

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 文字列

使用する演算子。><=など、任意のものが使用できます。

$operands 配列

2つのカラム名が含まれます。

$params 配列

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

return 文字列

生成された SQL 式

throws yii\base\InvalidArgumentException

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

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

            
buildUnion() public メソッド
public string buildUnion ( $unions, &$params )
$unions 配列
$params 配列

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

return 文字列

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 メソッド
public string buildWhere ( $condition, &$params )
$condition string|array
$params 配列

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

return 文字列

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 配列

各 WITH クエリの設定

$params 配列

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

return 文字列

ネストされたクエリを含むコンパイル済みのクエリの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 文字列

プロパティ名

$checkVars boolean

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

return 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 文字列

プロパティ名

$checkVars boolean

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

return boolean

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

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

            
checkIntegrity() public メソッド

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

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

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

整合性チェックをオンにするかオフにするか。

$schema 文字列

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

$table 文字列

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

return 文字列

整合性をチェックするためのSQLステートメント。

throws 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 メソッド
2.0.14以降非推奨。PHP >=5.5 では、代わりに ::class を使用してください。

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

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

public static string className ( )
return 文字列

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

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

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

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

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

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

$table 文字列

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

$columns string|array

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

$unique boolean

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

return 文字列

新しいインデックスを作成するための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 メソッド

定義場所: 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 文字列

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

$columns 配列

新しいテーブルの列 (名前 => 定義)。

$options string|null

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

return 文字列

新しい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 文字列

作成するビューの名前。

$subQuery string|yii\db\Query

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

return 文字列

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\conditions\InCondition' => 'yii\db\oci\conditions\InConditionBuilder',
        'yii\db\conditions\LikeCondition' => 'yii\db\oci\conditions\LikeConditionBuilder',
    ]);
}

            
delete() public メソッド

定義元: yii\db\QueryBuilder::delete()

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コマンドにバインドされるバインディングパラメータ。

return 文字列

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

定義元: yii\db\QueryBuilder::dropCheck()

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

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

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

$table 文字列

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

return 文字列

チェック制約を削除するためのSQLステートメント。

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

            
dropColumn() public メソッド

定義元: yii\db\QueryBuilder::dropColumn()

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

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

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

$column 文字列

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

return 文字列

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 文字列

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

return 文字列

列にコメントを追加するための SQL ステートメント

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

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

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

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

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

return 文字列

列にコメントを追加するための SQL ステートメント

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

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

定義元: yii\db\QueryBuilder::dropDefaultValue()

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

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

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

$table 文字列

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

return 文字列

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

throws yii\base\NotSupportedException

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

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

            
dropForeignKey() public メソッド

定義元: yii\db\QueryBuilder::dropForeignKey()

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

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

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

$table 文字列

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

return 文字列

外部キー制約を削除するための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 文字列

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

return 文字列

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

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

            
dropPrimaryKey() public メソッド

定義元: yii\db\QueryBuilder::dropPrimaryKey()

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

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

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

$table 文字列

主キー制約が削除されるテーブル。

return 文字列

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

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

            
dropTable() public メソッド

定義元: yii\db\QueryBuilder::dropTable()

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

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

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

return 文字列

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

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

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

定義元: yii\db\QueryBuilder::dropUnique()

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

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

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

$table 文字列

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

return 文字列

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

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

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

定義元: yii\db\QueryBuilder::dropView()

SQLビューを削除します。

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

削除されるビューの名前。

return 文字列

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になります。

throws yii\base\NotSupportedException

もしこれが基礎となるDBMSでサポートされていない場合。

                public function executeResetSequence($table, $value = null)
{
    $tableSchema = $this->db->getTableSchema($table);
    if ($tableSchema === null) {
        throw new InvalidArgumentException("Unknown table: $table");
    }
    if ($tableSchema->sequenceName === null) {
        throw new InvalidArgumentException("There is no sequence associated with table: $table");
    }
    if ($value !== null) {
        $value = (int) $value;
    } else {
        if (count($tableSchema->primaryKey) > 1) {
            throw new InvalidArgumentException("Can't reset sequence for composite primary key in table: $table");
        }
        // use master connection to get the biggest PK value
        $value = $this->db->useMaster(function (Connection $db) use ($tableSchema) {
            return $db->createCommand(
                'SELECT MAX("' . $tableSchema->primaryKey[0] . '") FROM "' . $tableSchema->name . '"'
            )->queryScalar();
        }) + 1;
    }
    //Oracle needs at least two queries to reset sequence (see adding transactions and/or use alter method to avoid grants' issue?)
    $this->db->createCommand('DROP SEQUENCE "' . $tableSchema->sequenceName . '"')->execute();
    $this->db->createCommand('CREATE SEQUENCE "' . $tableSchema->sequenceName . '" START WITH ' . $value
        . ' INCREMENT BY 1 NOMAXVALUE NOCACHE')->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:boolean タイプ。 "tinyint(1)" に変換されます
  • float:浮動小数点数タイプ。 "float" に変換されます
  • decimal:decimal 数値型。 "decimal" に変換されます
  • datetime:datetime タイプ。 "datetime" に変換されます
  • timestamp:timestamp タイプ。 "timestamp" に変換されます
  • time:time タイプ。 "time" に変換されます
  • date:date タイプ。 "date" に変換されます
  • money: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

抽象カラムタイプ

return 文字列

物理カラムタイプ。

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

定義元: yii\db\QueryBuilder::hasLimit()

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

protected boolean hasLimit ( $limit )
$limit mixed

指定されたlimit

return boolean

limit が有効かどうか

                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 文字列

メソッド名

return boolean

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

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

            
hasOffset() protected メソッド

定義元: yii\db\QueryBuilder::hasOffset()

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

protected boolean hasOffset ( $offset )
$offset mixed

指定されたオフセット

return 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

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

return boolean

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

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

            
init() public メソッド

定義元: yii\db\QueryBuilder::init()

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

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

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

定義元: yii\db\QueryBuilder::insert()

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

例: `php $sql = $queryBuilder->insert('user', [

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

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

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

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

$columns array|yii\db\Query

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

$params 配列

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

return 文字列

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 配列

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

return 配列

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

throws 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コマンドにバインドされる必要があります。

return 配列

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

                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) {
            $columns = !empty($tableSchema->primaryKey) ? $tableSchema->primaryKey : [reset($tableSchema->columns)->name];
            foreach ($columns as $name) {
                $names[] = $this->db->quoteColumnName($name);
                $placeholders[] = 'DEFAULT';
            }
        }
    }
    return [$names, $placeholders, $values, $params];
}

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

定義元: yii\db\QueryBuilder::prepareUpdateSets()

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

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

更新するテーブル。

$columns 配列

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

$params 配列

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

return 配列

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

定義元: yii\db\QueryBuilder::renameColumn()

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

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

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

$oldName 文字列

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

$newName 文字列

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

return 文字列

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 ( $table, $newName )
$table 文字列

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

$newName 文字列

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

return 文字列

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

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

            
resetSequence() public メソッド

定義元: yii\db\QueryBuilder::resetSequence()

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

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

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

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

$value array|string|null

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

return 文字列

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

throws 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 文字列

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

return 文字列

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

                public function selectExists($rawSql)
{
    return 'SELECT CASE WHEN EXISTS(' . $rawSql . ') THEN 1 ELSE 0 END FROM DUAL';
}

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

定義元: yii\db\QueryBuilder::setConditionClasses()

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

定義元: yii\db\QueryBuilder::setExpressionBuilders()

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

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

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

$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 文字列

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

return 文字列

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 文字列

更新するテーブル。

$columns 配列

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

$condition array|string

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

$params 配列

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

return 文字列

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://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606.

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

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

$insertColumns array|yii\db\Query

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

$updateColumns array|boolean

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

$params 配列

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

return 文字列

結果のSQL。

throws yii\base\NotSupportedException

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

                public function upsert($table, $insertColumns, $updateColumns, &$params)
{
    /** @var Constraint[] $constraints */
    list($uniqueNames, $insertNames, $updateNames) = $this->prepareUpsertColumns($table, $insertColumns, $updateColumns, $constraints);
    if (empty($uniqueNames)) {
        return $this->insert($table, $insertColumns, $params);
    }
    if ($updateNames === []) {
        // there are no columns to update
        $updateColumns = false;
    }
    $onCondition = ['or'];
    $quotedTableName = $this->db->quoteTableName($table);
    foreach ($constraints as $constraint) {
        $constraintCondition = ['and'];
        foreach ($constraint->columnNames as $name) {
            $quotedName = $this->db->quoteColumnName($name);
            $constraintCondition[] = "$quotedTableName.$quotedName=\"EXCLUDED\".$quotedName";
        }
        $onCondition[] = $constraintCondition;
    }
    $on = $this->buildCondition($onCondition, $params);
    list(, $placeholders, $values, $params) = $this->prepareInsertValues($table, $insertColumns, $params);
    if (!empty($placeholders)) {
        $usingSelectValues = [];
        foreach ($insertNames as $index => $name) {
            $usingSelectValues[$name] = new Expression($placeholders[$index]);
        }
        $usingSubQuery = (new Query())
            ->select($usingSelectValues)
            ->from('DUAL');
        list($usingValues, $params) = $this->build($usingSubQuery, $params);
    }
    $mergeSql = 'MERGE INTO ' . $this->db->quoteTableName($table) . ' '
        . 'USING (' . (isset($usingValues) ? $usingValues : ltrim($values, ' ')) . ') "EXCLUDED" '
        . "ON ($on)";
    $insertValues = [];
    foreach ($insertNames as $name) {
        $quotedName = $this->db->quoteColumnName($name);
        if (strrpos($quotedName, '.') === false) {
            $quotedName = '"EXCLUDED".' . $quotedName;
        }
        $insertValues[] = $quotedName;
    }
    $insertSql = 'INSERT (' . implode(', ', $insertNames) . ')'
        . ' VALUES (' . implode(', ', $insertValues) . ')';
    if ($updateColumns === false) {
        return "$mergeSql WHEN NOT MATCHED THEN $insertSql";
    }
    if ($updateColumns === true) {
        $updateColumns = [];
        foreach ($updateNames as $name) {
            $quotedName = $this->db->quoteColumnName($name);
            if (strrpos($quotedName, '.') === false) {
                $quotedName = '"EXCLUDED".' . $quotedName;
            }
            $updateColumns[$name] = new Expression($quotedName);
        }
    }
    list($updates, $params) = $this->prepareUpdateSets($table, $updateColumns, $params);
    $updateSql = 'UPDATE SET ' . implode(', ', $updates);
    return "$mergeSql WHEN MATCHED THEN $updateSql WHEN NOT MATCHED THEN $insertSql";
}