クラス yii\db\QueryBuilder
QueryBuilder は、yii\db\Query オブジェクトとして与えられた仕様に基づいて SELECT SQL ステートメントを構築します。
SQL ステートメントは、yii\db\Query オブジェクトから build() メソッドを使用して作成されます。
QueryBuilder は、INSERT、UPDATE、DELETE、CREATE TABLE などの SQL ステートメントを構築するために yii\db\Command によっても使用されます。
QueryBuilder の詳細と使用方法については、クエリビルダーに関するガイド記事をご覧ください。
パブリックプロパティ
プロパティ | 型 | 説明 | 定義元 |
---|---|---|---|
$conditionBuilders | 配列 | クエリ条件とビルダーメソッドのマップ。 | yii\db\QueryBuilder |
$conditionClasses | 配列 | 条件エイリアスと条件クラスのマップ。 | yii\db\QueryBuilder |
$db | yii\db\Connection | データベース接続。 | yii\db\QueryBuilder |
$expressionBuilders | 文字列[]|yii\db\ExpressionBuilderInterface[] | 式クラスを式ビルダー クラスにマッピングします。 | yii\db\QueryBuilder |
$separator | 文字列 | SQL ステートメントの異なるフラグメント間の区切り文字。 | yii\db\QueryBuilder |
$typeMap | 配列 | 抽象的なカラム型が物理的なカラム型にマップされます。 | yii\db\QueryBuilder |
パブリックメソッド
保護されたメソッド
メソッド | 説明 | 定義元 |
---|---|---|
defaultConditionClasses() | デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。詳細については、$conditionClasses のドキュメントを参照してください。 | yii\db\QueryBuilder |
defaultExpressionBuilders() | デフォルトの式ビルダーの配列を含みます。このクエリビルダーのデフォルトの式ビルダーを変更したい場合は、このメソッドを拡張してオーバーライドしてください。詳細については、$expressionBuilders のドキュメントを参照してください。 | yii\db\QueryBuilder |
extractAlias() | テーブルエイリアスがある場合はそれを抽出し、ない場合はfalseを返します。 | yii\db\QueryBuilder |
hasLimit() | 指定された制限が有効かどうかを確認します。 | yii\db\QueryBuilder |
hasOffset() | 指定されたオフセットが有効かどうかを確認します。 | yii\db\QueryBuilder |
prepareInsertSelectSubQuery() | INSERT INTO ... SELECT SQLステートメントの select-subquery とフィールド名を準備します。 | yii\db\QueryBuilder |
prepareInsertValues() | INSERT SQLステートメントのVALUES 部分を準備します。 |
yii\db\QueryBuilder |
prepareUpdateSets() | UPDATE SQLステートメントのSET 部分を準備します。 |
yii\db\QueryBuilder |
prepareUpsertColumns() | yii\db\QueryBuilder |
プロパティ詳細
クエリ条件からビルダーメソッドへのマップ。これらのメソッドは、buildCondition() によって、配列構文からSQL条件を構築するために使用されます。
条件エイリアスから条件クラスへのマップ。例:
return [
'LIKE' => yii\db\condition\LikeCondition::class,
];
このプロパティは、createConditionFromArray() メソッドで使用されます。defaultConditionClasses() メソッドのデフォルトの条件クラスリストを参照してください。
カスタム条件のサポートを追加したい場合は、setConditionClasses() メソッドを使用してください。
参考
式クラスから式ビルダークラスへのマップ。例:
[
yii\db\Expression::class => yii\db\ExpressionBuilder::class
]
このプロパティは、主に buildExpression() によって、式オブジェクトからSQL式を構築するために使用されます。defaultExpressionBuilders() メソッドのデフォルト値を参照してください。
既存のビルダーをオーバーライドしたり、カスタムビルダーを追加したりするには、setExpressionBuilder() メソッドを使用してください。新しい項目はこの配列の末尾に追加されます。
ビルダーを見つけるために、buildExpression() は、このマップ内に式クラスが正確に存在するかどうかを確認します。存在しない場合は、このマップで定義されているクラスを式が拡張しているかどうかを逆方向に反復処理して確認します。
参考
SQLステートメントの異なるフラグメント間の区切り文字。デフォルトは空白です。これは主に build() がSQLステートメントを生成する際に使用されます。
メソッド詳細
定義場所: yii\base\BaseObject::__call()
クラスメソッドではない名前付きメソッドを呼び出します。
このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。
public mixed __call ( $name, $params ) | ||
$name | 文字列 |
メソッド名 |
$params | 配列 |
メソッドパラメータ |
戻り値 | mixed |
メソッドの戻り値 |
---|---|---|
例外 | yii\base\UnknownMethodException |
不明なメソッドを呼び出すとき |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
コンストラクタ。
public void __construct ( $connection, $config = [] ) | ||
$connection | yii\db\Connection |
データベース接続。 |
$config | 配列 |
オブジェクトプロパティを初期化するために使用される名前と値のペア |
public function __construct($connection, $config = [])
{
$this->db = $connection;
parent::__construct($config);
}
定義元: yii\base\BaseObject::__get()
オブジェクトプロパティの値を返します。
$value = $object->property;
の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
以下も参照してください: __set().
public mixed __get ( $name ) | ||
$name | 文字列 |
プロパティ名 |
戻り値 | mixed |
プロパティの値 |
---|---|---|
例外 | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
例外 | yii\base\InvalidCallException |
プロパティが書き込み専用の場合 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義元: yii\base\BaseObject::__isset()
プロパティが設定されているか、つまり定義されていて null でないかを確認します。
isset($object->property)
の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
プロパティが定義されていない場合は、falseが返されることに注意してください。
以下も参照してください: https://www.php.net/manual/en/function.isset.php.
public boolean __isset ( $name ) | ||
$name | 文字列 |
プロパティ名またはイベント名 |
戻り値 | boolean |
指定されたプロパティが設定されているかどうか (nullではない) |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
定義元: yii\base\BaseObject::__set()
オブジェクトプロパティの値を設定します。
$object->property = $value;
の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
以下も参照してください: __get().
public void __set ( $name, $value ) | ||
$name | 文字列 |
プロパティ名またはイベント名 |
$value | mixed |
プロパティの値 |
例外 | yii\base\UnknownPropertyException |
プロパティが定義されていない場合 |
---|---|---|
例外 | yii\base\InvalidCallException |
プロパティが読み取り専用の場合 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
定義元: yii\base\BaseObject::__unset()
オブジェクトプロパティを null に設定します。
unset($object->property)
の実行時に暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。
プロパティが定義されていない場合、このメソッドは何もしないことに注意してください。プロパティが読み取り専用の場合、例外がスローされます。
以下も参照してください: https://www.php.net/manual/en/function.unset.php.
public void __unset ( $name ) | ||
$name | 文字列 |
プロパティ名 |
例外 | yii\base\InvalidCallException |
プロパティが読み取り専用の場合 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
既存のテーブルにチェック制約を追加するための SQL コマンドを作成します。
public string addCheck ( $name, $table, $expression ) | ||
$name | 文字列 |
チェック制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
チェック制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。 |
$expression | 文字列 |
|
戻り値 | 文字列 |
既存のテーブルにチェック制約を追加するための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) . ')';
}
新しい DB カラムを追加するための SQL ステートメントを構築します。
public string addColumn ( $table, $column, $type ) | ||
$table | 文字列 |
新しいカラムが追加されるテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$column | 文字列 |
新しいカラムの名前。名前はメソッドによって適切にクォートされます。 |
$type | 文字列 |
カラムの型。getColumnType() メソッドが呼び出され、抽象カラム型 (もしあれば) を物理的な型に変換します。抽象型として認識されないものは、生成されたSQLに保持されます。たとえば、'string' は 'varchar(255)' に変換され、'string not null' は 'varchar(255) not null' になります。 |
戻り値 | 文字列 |
新しいカラムを追加するためのSQL文。 |
---|
public function addColumn($table, $column, $type)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' ADD ' . $this->db->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
カラムにコメントを追加するための SQL コマンドを構築します。
public string addCommentOnColumn ( $table, $column, $comment ) | ||
$table | 文字列 |
コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$column | 文字列 |
コメントが追加されるカラムの名前。カラム名はメソッドによって適切にクォートされます。 |
$comment | 文字列 |
追加するコメントのテキスト。コメントはメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
カラムにコメントを追加するためのSQL文 |
---|
public function addCommentOnColumn($table, $column, $comment)
{
return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS ' . $this->db->quoteValue($comment);
}
テーブルにコメントを追加するための SQL コマンドを構築します。
public string addCommentOnTable ( $table, $comment ) | ||
$table | 文字列 |
コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$comment | 文字列 |
追加するコメントのテキスト。コメントはメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
テーブルにコメントを追加するためのSQL文 |
---|
public function addCommentOnTable($table, $comment)
{
return 'COMMENT ON TABLE ' . $this->db->quoteTableName($table) . ' IS ' . $this->db->quoteValue($comment);
}
既存のテーブルにデフォルト値制約を追加するための SQL コマンドを作成します。
public string addDefaultValue ( $name, $table, $column, $value ) | ||
$name | 文字列 |
デフォルト値制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
デフォルト値制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。 |
$column | 文字列 |
制約が追加されるカラムの名前。名前はメソッドによって適切にクォートされます。 |
$value | mixed |
デフォルト値。 |
戻り値 | 文字列 |
既存のテーブルにデフォルト値制約を追加するためのSQL文。 |
---|---|---|
例外 | yii\base\NotSupportedException |
基盤となるDBMSでサポートされていない場合。 |
public function addDefaultValue($name, $table, $column, $value)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support adding default value constraints.');
}
既存のテーブルに外部キー制約を追加するための SQL ステートメントを構築します。
このメソッドは、テーブル名とカラム名を適切にクォートします。
public string addForeignKey ( $name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null ) | ||
$name | 文字列 |
外部キー制約の名前。 |
$table | 文字列 |
外部キー制約が追加されるテーブル。 |
$columns | string|array |
制約が追加されるカラムの名前。複数のカラムがある場合は、カンマで区切るか、それらを表すために配列を使用します。 |
$refTable | 文字列 |
外部キーが参照するテーブル。 |
$refColumns | string|array |
外部キーが参照するカラムの名前。複数のカラムがある場合は、カンマで区切るか、それらを表すために配列を使用します。 |
$delete | string|null |
ON DELETE オプション。ほとんどの DBMS は、RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL のオプションをサポートしています。 |
$update | string|null |
ON UPDATE オプション。ほとんどの DBMS は、RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL のオプションをサポートしています。 |
戻り値 | 文字列 |
既存のテーブルに外部キー制約を追加するための SQL ステートメント。 |
---|
public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
$sql = 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' ADD CONSTRAINT ' . $this->db->quoteColumnName($name)
. ' FOREIGN KEY (' . $this->buildColumns($columns) . ')'
. ' REFERENCES ' . $this->db->quoteTableName($refTable)
. ' (' . $this->buildColumns($refColumns) . ')';
if ($delete !== null) {
$sql .= ' ON DELETE ' . $delete;
}
if ($update !== null) {
$sql .= ' ON UPDATE ' . $update;
}
return $sql;
}
既存のテーブルにプライマリキー制約を追加するための SQL ステートメントを構築します。
public string addPrimaryKey ( $name, $table, $columns ) | ||
$name | 文字列 |
主キー制約の名前。 |
$table | 文字列 |
主キー制約が追加されるテーブル。 |
$columns | string|array |
主キーを構成するカラムのカンマ区切り文字列または配列。 |
戻り値 | 文字列 |
既存のテーブルに主キー制約を追加するための SQL ステートメント。 |
---|
public function addPrimaryKey($name, $table, $columns)
{
if (is_string($columns)) {
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
}
foreach ($columns as $i => $col) {
$columns[$i] = $this->db->quoteColumnName($col);
}
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
. $this->db->quoteColumnName($name) . ' PRIMARY KEY ('
. implode(', ', $columns) . ')';
}
既存のテーブルに一意制約を追加するための SQL コマンドを作成します。
public string addUnique ( $name, $table, $columns ) | ||
$name | 文字列 |
ユニーク制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
ユニーク制約が追加されるテーブル。名前はメソッドによって適切にクォートされます。 |
$columns | string|array |
制約が追加されるカラムの名前。複数のカラムがある場合は、カンマで区切ります。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
既存のテーブルにユニーク制約を追加するための SQL ステートメント。 |
---|
public function addUnique($name, $table, $columns)
{
if (is_string($columns)) {
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
}
foreach ($columns as $i => $col) {
$columns[$i] = $this->db->quoteColumnName($col);
}
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' ADD CONSTRAINT '
. $this->db->quoteColumnName($name) . ' UNIQUE ('
. implode(', ', $columns) . ')';
}
カラムの定義を変更するための SQL ステートメントを構築します。
public string alterColumn ( $table, $column, $type ) | ||
$table | 文字列 |
カラムが変更されるテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$column | 文字列 |
変更されるカラムの名前。名前はメソッドによって適切にクォートされます。 |
$type | 文字列 |
新しいカラムの型。getColumnType() メソッドが、抽象的なカラム型 (存在する場合) を物理的な型に変換するために呼び出されます。抽象的な型として認識されないものは、生成された SQL に保持されます。たとえば、'string' は 'varchar(255)' に変換されますが、'string not null' は 'varchar(255) not null' になります。 |
戻り値 | 文字列 |
カラムの定義を変更するための SQL ステートメント。 |
---|
public function alterColumn($table, $column, $type)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table) . ' CHANGE '
. $this->db->quoteColumnName($column) . ' '
. $this->db->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
バッチ INSERT SQL ステートメントを生成します。
例:
$sql = $queryBuilder->batchInsert('user', ['name', 'age'], [
['Tom', 30],
['Jane', 20],
['Linda', 25],
]);
各行の値は、対応するカラム名と一致する必要があることに注意してください。
このメソッドは、カラム名を適切にエスケープし、挿入される値をクォートします。
public string batchInsert ( $table, $columns, $rows, &$params = [] ) | ||
$table | 文字列 |
新しい行が挿入されるテーブル。 |
$columns | 配列 |
カラム名 |
$rows | array|Generator |
テーブルに一括挿入される行 |
$params | 配列 |
バインドパラメータ。このパラメータは 2.0.14 から存在します。 |
戻り値 | 文字列 |
一括 INSERT SQL ステートメント |
---|
public function batchInsert($table, $columns, $rows, &$params = [])
{
if (empty($rows)) {
return '';
}
$schema = $this->db->getSchema();
if (($tableSchema = $schema->getTableSchema($table)) !== null) {
$columnSchemas = $tableSchema->columns;
} else {
$columnSchemas = [];
}
$values = [];
foreach ($rows as $row) {
$vs = [];
foreach ($row as $i => $value) {
if (isset($columns[$i], $columnSchemas[$columns[$i]])) {
$value = $columnSchemas[$columns[$i]]->dbTypecast($value);
}
if (is_string($value)) {
$value = $schema->quoteValue($value);
} elseif (is_float($value)) {
// ensure type cast always has . as decimal separator in all locales
$value = StringHelper::floatToString($value);
} elseif ($value === false) {
$value = 0;
} elseif ($value === null) {
$value = 'NULL';
} elseif ($value instanceof ExpressionInterface) {
$value = $this->buildExpression($value, $params);
}
$vs[] = $value;
}
$values[] = '(' . implode(', ', $vs) . ')';
}
if (empty($values)) {
return '';
}
foreach ($columns as $i => $name) {
$columns[$i] = $schema->quoteColumnName($name);
}
return 'INSERT INTO ' . $schema->quoteTableName($table)
. ' (' . implode(', ', $columns) . ') VALUES ' . implode(', ', $values);
}
PARAM_PREFIX を使用して、$value を $params 配列に追加するヘルパーメソッド。
public string bindParam ( $value, &$params ) | ||
$value | string|null | |
$params | 配列 |
参照渡し |
戻り値 | 文字列 |
$params 配列内のプレースホルダー名 |
---|
public function bindParam($value, &$params)
{
$phName = self::PARAM_PREFIX . count($params);
$params[$phName] = $value;
return $phName;
}
yii\db\Query オブジェクトから SELECT SQL ステートメントを生成します。
public array build ( $query, $params = [] ) | ||
$query | yii\db\Query |
SQL ステートメントが生成される yii\db\Query オブジェクト。 |
$params | 配列 |
生成された SQL ステートメントにバインドされるパラメータ。これらのパラメータは、クエリの構築プロセス中に生成された追加のパラメータとともに結果に含まれます。 |
戻り値 | 配列 |
生成された SQL ステートメント (配列の最初の要素) と、SQL ステートメントにバインドされる対応するパラメータ (配列の 2 番目の要素)。返されるパラメータには、 |
---|
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];
}
buildCondition()
を使用してください。
2 つ以上の SQL 式を AND
または OR
演算子で接続します。
public string buildAndCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
指定されたオペランドを接続するために使用する演算子 |
$operands | 配列 |
接続する SQL 式。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|
public function buildAndCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
buildCondition()
を使用してください。
BETWEEN
演算子を使用した SQL 式を作成します。
public string buildBetweenCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
使用する演算子 (例: |
$operands | 配列 |
最初のオペランドはカラム名です。2 番目と 3 番目のオペランドは、カラム値が存在すべき間隔を表します。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
オペランドの数が間違っている場合。 |
public function buildBetweenCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
カラムを処理し、必要に応じて適切にクォートします。
すべてのカラムをカンマ区切りの文字列に結合します。
public string buildColumns ( $columns ) | ||
$columns | string|array |
処理対象のカラム。 |
戻り値 | 文字列 |
処理結果。 |
---|
public function buildColumns($columns)
{
if (!is_array($columns)) {
if (strpos($columns, '(') !== false) {
return $columns;
}
$rawColumns = $columns;
$columns = preg_split('/\s*,\s*/', $columns, -1, PREG_SPLIT_NO_EMPTY);
if ($columns === false) {
throw new InvalidArgumentException("$rawColumns is not valid columns.");
}
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
$columns[$i] = $this->buildExpression($column);
} elseif (strpos($column, '(') === false) {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
return implode(', ', $columns);
}
条件の仕様を解析し、対応する SQL 式を生成します。
public string buildCondition ( $condition, &$params ) | ||
$condition | string|array|yii\db\ExpressionInterface |
条件の指定。条件の指定方法については、yii\db\Query::where()を参照してください。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|
public function buildCondition($condition, &$params)
{
if (is_array($condition)) {
if (empty($condition)) {
return '';
}
$condition = $this->createConditionFromArray($condition);
}
if ($condition instanceof ExpressionInterface) {
return $this->buildExpression($condition, $params);
}
return (string)$condition;
}
buildCondition()
を使用してください。
EXISTS
演算子を使用した SQL 式を作成します。
public string buildExistsCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
使用する演算子 (例: |
$operands | 配列 |
サブクエリを表す yii\db\Query オブジェクトである単一の要素のみを含みます。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
オペランドが yii\db\Query オブジェクトでない場合。 |
public function buildExistsCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
指定された $expression を構築します
参考
public string buildExpression ( yii\db\ExpressionInterface $expression, &$params = [] ) | ||
$expression | yii\db\ExpressionInterface |
構築する式。 |
$params | 配列 |
生成されたSQL文にバインドされるパラメータ。これらのパラメータは、式構築プロセス中に生成された追加のパラメータとともに結果に含まれます。 |
戻り値 | 文字列 |
DBMSに渡す前に、引用符で囲まれたりエンコードされたりしないSQL文。 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
$expressionの構築がこのQueryBuilderでサポートされていない場合。 |
public function buildExpression(ExpressionInterface $expression, &$params = [])
{
$builder = $this->getExpressionBuilder($expression);
return $builder->build($expression, $params);
}
public string buildFrom ( $tables, &$params ) | ||
$tables | 配列 | |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
yii\db\Query::$from から構築されたFROM句。 |
---|
public function buildFrom($tables, &$params)
{
if (empty($tables)) {
return '';
}
$tables = $this->quoteTableNames($tables, $params);
return 'FROM ' . implode(', ', $tables);
}
public string buildGroupBy ( $columns ) | ||
$columns | 配列 | |
戻り値 | 文字列 |
GROUP BY句。 |
---|
public function buildGroupBy($columns)
{
if (empty($columns)) {
return '';
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
$columns[$i] = $this->buildExpression($column);
} elseif (strpos($column, '(') === false) {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
return 'GROUP BY ' . implode(', ', $columns);
}
buildCondition()
を使用してください。
カラムと値のペアに基づいて条件を作成します。
public string buildHashCondition ( $condition, &$params ) | ||
$condition | 配列 |
条件の指定。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|
public function buildHashCondition($condition, &$params)
{
return $this->buildCondition(new HashCondition($condition), $params);
}
public string buildHaving ( $condition, &$params ) | ||
$condition | string|array | |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
yii\db\Query::$having から構築されたHAVING句。 |
---|
public function buildHaving($condition, &$params)
{
$having = $this->buildCondition($condition, $params);
return $having === '' ? '' : 'HAVING ' . $having;
}
buildCondition()
を使用してください。
IN
演算子を使用した SQL 式を作成します。
public string buildInCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
使用する演算子(例: |
$operands | 配列 |
最初のオペランドはカラム名です。配列の場合は複合IN条件が生成されます。2番目のオペランドは、カラムの値が含まれる必要のある値の配列です。空の配列の場合、生成される式は、演算子が |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\db\Exception |
オペランドの数が間違っている場合。 |
public function buildInCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildJoin ( $joins, &$params ) | ||
$joins | 配列 | |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
yii\db\Query::$join から構築されたJOIN句。 |
---|---|---|
例外 | yii\db\Exception |
$joinsパラメータが正しい形式でない場合。 |
public function buildJoin($joins, &$params)
{
if (empty($joins)) {
return '';
}
foreach ($joins as $i => $join) {
if (!is_array($join) || !isset($join[0], $join[1])) {
throw new Exception('A join clause must be specified as an array of join type, join table, and optionally join condition.');
}
// 0:join type, 1:join table, 2:on-condition (optional)
list($joinType, $table) = $join;
$tables = $this->quoteTableNames((array)$table, $params);
$table = reset($tables);
$joins[$i] = "$joinType $table";
if (isset($join[2])) {
$condition = $this->buildCondition($join[2], $params);
if ($condition !== '') {
$joins[$i] .= ' ON ' . $condition;
}
}
}
return implode($this->separator, $joins);
}
buildCondition()
を使用してください。
LIKE
演算子を使用した SQL 式を作成します。
public string buildLikeCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
使用する演算子(例: |
$operands | 配列 |
2つまたは3つのオペランドの配列。
|
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
オペランドの数が間違っている場合。 |
public function buildLikeCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildLimit ( $limit, $offset ) | ||
$limit | integer | |
$offset | integer | |
戻り値 | 文字列 |
LIMIT句とOFFSET句 |
---|
public function buildLimit($limit, $offset)
{
$sql = '';
if ($this->hasLimit($limit)) {
$sql = 'LIMIT ' . $limit;
}
if ($this->hasOffset($offset)) {
$sql .= ' OFFSET ' . $offset;
}
return ltrim($sql);
}
buildCondition()
を使用してください。
NOT
演算子で SQL 式を反転させます。
public string buildNotCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
指定されたオペランドを接続するために使用する演算子 |
$operands | 配列 |
接続する SQL 式。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
オペランドの数が間違っている場合。 |
public function buildNotCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildOrderBy ( $columns ) | ||
$columns | 配列 | |
戻り値 | 文字列 |
yii\db\Query::$orderByから構築されたORDER BY句。 |
---|
public function buildOrderBy($columns)
{
if (empty($columns)) {
return '';
}
$orders = [];
foreach ($columns as $name => $direction) {
if ($direction instanceof ExpressionInterface) {
$orders[] = $this->buildExpression($direction);
} else {
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
}
}
return 'ORDER BY ' . implode(', ', $orders);
}
ORDER BY および LIMIT/OFFSET 句を構築し、指定された SQL に付加します。
public string buildOrderByAndLimit ( $sql, $orderBy, $limit, $offset ) | ||
$sql | 文字列 |
既存のSQL(ORDER BY / LIMIT / OFFSETなし) |
$orderBy | 配列 |
並び替えの列。このパラメータの指定方法の詳細については、yii\db\Query::orderBy()を参照してください。 |
$limit | integer |
制限数。詳細については、yii\db\Query::limit()を参照してください。 |
$offset | integer |
オフセット数。詳細については、yii\db\Query::offset()を参照してください。 |
戻り値 | 文字列 |
ORDER BY / LIMIT / OFFSET(存在する場合)で完成したSQL |
---|
public function buildOrderByAndLimit($sql, $orderBy, $limit, $offset)
{
$orderBy = $this->buildOrderBy($orderBy);
if ($orderBy !== '') {
$sql .= $this->separator . $orderBy;
}
$limit = $this->buildLimit($limit, $offset);
if ($limit !== '') {
$sql .= $this->separator . $limit;
}
return $sql;
}
public string buildSelect ( $columns, &$params, $distinct = false, $selectOption = null ) | ||
$columns | 配列 | |
$params | 配列 |
設定するバインドパラメータ |
$distinct | boolean | |
$selectOption | string|null | |
戻り値 | 文字列 |
yii\db\Query::$selectから構築されたSELECT句。 |
---|
public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
{
$select = $distinct ? 'SELECT DISTINCT' : 'SELECT';
if ($selectOption !== null) {
$select .= ' ' . $selectOption;
}
if (empty($columns)) {
return $select . ' *';
}
foreach ($columns as $i => $column) {
if ($column instanceof ExpressionInterface) {
if (is_int($i)) {
$columns[$i] = $this->buildExpression($column, $params);
} else {
$columns[$i] = $this->buildExpression($column, $params) . ' AS ' . $this->db->quoteColumnName($i);
}
} elseif ($column instanceof Query) {
list($sql, $params) = $this->build($column, $params);
$columns[$i] = "($sql) AS " . $this->db->quoteColumnName($i);
} elseif (is_string($i) && $i !== $column) {
if (strpos($column, '(') === false) {
$column = $this->db->quoteColumnName($column);
}
$columns[$i] = "$column AS " . $this->db->quoteColumnName($i);
} elseif (strpos($column, '(') === false) {
if (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $column, $matches)) {
$columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
} else {
$columns[$i] = $this->db->quoteColumnName($column);
}
}
}
return $select . ' ' . implode(', ', $columns);
}
buildCondition()
を使用してください。
"column" 演算子 value
のような SQL 式を作成します。
public string buildSimpleCondition ( $operator, $operands, &$params ) | ||
$operator | 文字列 |
使用する演算子。 |
$operands | 配列 |
2つの列名が含まれています。 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
生成された SQL 式 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
オペランドの数が間違っている場合。 |
public function buildSimpleCondition($operator, $operands, &$params)
{
array_unshift($operands, $operator);
return $this->buildCondition($operands, $params);
}
public string buildUnion ( $unions, &$params ) | ||
$unions | 配列 | |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
yii\db\Query::$unionから構築されたUNION句。 |
---|
public function buildUnion($unions, &$params)
{
if (empty($unions)) {
return '';
}
$result = '';
foreach ($unions as $i => $union) {
$query = $union['query'];
if ($query instanceof Query) {
list($unions[$i]['query'], $params) = $this->build($query, $params);
}
$result .= 'UNION ' . ($union['all'] ? 'ALL ' : '') . '( ' . $unions[$i]['query'] . ' ) ';
}
return trim($result);
}
public string buildWhere ( $condition, &$params ) | ||
$condition | string|array | |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
yii\db\Query::$whereから構築されたWHERE句。 |
---|
public function buildWhere($condition, &$params)
{
$where = $this->buildCondition($condition, $params);
return $where === '' ? '' : 'WHERE ' . $where;
}
yii\db\Query::withQuery()も参照してください。
public string buildWithQueries ( $withs, &$params ) | ||
$withs | 配列 |
各WITHクエリの設定 |
$params | 配列 |
設定するバインドパラメータ |
戻り値 | 文字列 |
ネストされたクエリを含む、クエリのコンパイルされたWITHプレフィックス |
---|
public function buildWithQueries($withs, &$params)
{
if (empty($withs)) {
return '';
}
$recursive = false;
$result = [];
foreach ($withs as $i => $with) {
if ($with['recursive']) {
$recursive = true;
}
$query = $with['query'];
if ($query instanceof Query) {
list($with['query'], $params) = $this->build($query, $params);
}
$result[] = $with['alias'] . ' AS (' . $with['query'] . ')';
}
return 'WITH ' . ($recursive ? 'RECURSIVE ' : '') . implode(', ', $result);
}
定義: yii\base\BaseObject::canGetProperty()
プロパティが読み取り可能かどうかを示す値を返します。
プロパティが読み取り可能である条件は次のとおりです。
- クラスには、指定された名前に関連付けられたgetterメソッドがあります(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスには、指定された名前のメンバー変数があります(
$checkVars
がtrueの場合)。
canSetProperty()も参照してください。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティを読み取ることができるかどうか |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
定義: yii\base\BaseObject::canSetProperty()
プロパティが設定可能かどうかを示す値を返します。
プロパティが書き込み可能である条件は次のとおりです。
- クラスには、指定された名前に関連付けられたsetterメソッドがあります(この場合、プロパティ名は大文字と小文字を区別しません)。
- クラスには、指定された名前のメンバー変数があります(
$checkVars
がtrueの場合)。
canGetProperty()も参照してください。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティを書き込むことができるかどうか |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
整合性チェックを有効または無効にするための SQL ステートメントを構築します。
public string checkIntegrity ( $check = true, $schema = '', $table = '' ) | ||
$check | boolean |
整合性チェックを有効にするか無効にするか。 |
$schema | 文字列 |
テーブルのスキーマ。デフォルトは空文字列で、現在のスキーマまたはデフォルトのスキーマを意味します。 |
$table | 文字列 |
テーブル名。デフォルトは空文字列で、テーブルが変更されないことを意味します。 |
戻り値 | 文字列 |
整合性チェックのためのSQL文 |
---|---|---|
例外 | yii\base\NotSupportedException |
これが基盤となるDBMSでサポートされていない場合 |
public function checkIntegrity($check = true, $schema = '', $table = '')
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support enabling/disabling integrity check.');
}
::class
を使用してください。
定義元: yii\base\BaseObject::className()
このクラスの完全修飾名を返します。
public static string className ( ) | ||
戻り値 | 文字列 |
このクラスの完全修飾名。 |
---|
public static function className()
{
return get_called_class();
}
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);
}
新しいインデックスを作成するための SQL ステートメントを構築します。
public string createIndex ( $name, $table, $columns, $unique = false ) | ||
$name | 文字列 |
インデックスの名前。この名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
新しいインデックスが作成されるテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$columns | string|array |
インデックスに含める必要があるカラム。複数のカラムがある場合は、コンマで区切るか、配列を使用してそれらを表します。各カラム名は、名前に括弧が見つからない限り、メソッドによって適切にクォートされます。 |
$unique | boolean |
作成されたインデックスにUNIQUE制約を追加するかどうか。 |
戻り値 | 文字列 |
新しいインデックスを作成するためのSQL文。 |
---|
public function createIndex($name, $table, $columns, $unique = false)
{
return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
. $this->db->quoteTableName($name) . ' ON '
. $this->db->quoteTableName($table)
. ' (' . $this->buildColumns($columns) . ')';
}
新しい DB テーブルを作成するための SQL ステートメントを構築します。
新しいテーブルのカラムは、名前と定義のペア(例:'name' => 'string')として指定する必要があります。ここで、nameはメソッドによって適切にクォートされるカラム名を表し、definitionは抽象的なDB型を含むカラム型を表します。抽象的な型を物理的な型に変換するために、getColumnType()メソッドが呼び出されます。
カラムが定義のみで指定されている場合(例:'PRIMARY KEY (name, type)')、生成されたSQLに直接挿入されます。
例:
$sql = $queryBuilder->createTable('user', [
'id' => 'pk',
'name' => 'string',
'age' => 'integer',
'column_name double precision null default null', # definition only example
]);
public string createTable ( $table, $columns, $options = null ) | ||
$table | 文字列 |
作成するテーブルの名前。この名前はメソッドによって適切にクォートされます。 |
$columns | 配列 |
新しいテーブルのカラム(name => definition)。 |
$options | string|null |
生成されたSQLに追加される追加のSQLフラグメント。 |
戻り値 | 文字列 |
新しいDBテーブルを作成するためのSQL文。 |
---|
public function createTable($table, $columns, $options = null)
{
$cols = [];
foreach ($columns as $name => $type) {
if (is_string($name)) {
$cols[] = "\t" . $this->db->quoteColumnName($name) . ' ' . $this->getColumnType($type);
} else {
$cols[] = "\t" . $type;
}
}
$sql = 'CREATE TABLE ' . $this->db->quoteTableName($table) . " (\n" . implode(",\n", $cols) . "\n)";
return $options === null ? $sql : $sql . ' ' . $options;
}
SQL ビューを作成します。
public string createView ( $viewName, $subQuery ) | ||
$viewName | 文字列 |
作成するビューの名前。 |
$subQuery | string|yii\db\Query |
ビューを定義するselect文。これは、文字列またはyii\db\Queryオブジェクトのいずれかになります。 |
戻り値 | 文字列 |
|
---|
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;
}
デフォルトの条件クラスの配列を含みます。クエリビルダーのデフォルトの条件クラスを変更したい場合は、このメソッドを拡張してください。詳細については、$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',
];
}
デフォルトの式ビルダーの配列を含みます。このクエリビルダーのデフォルトの式ビルダーを変更したい場合は、このメソッドを拡張してオーバーライドしてください。詳細については、$expressionBuilders のドキュメントを参照してください。
$expressionBuilders も参照してください。
protected array defaultExpressionBuilders ( ) |
protected function defaultExpressionBuilders()
{
return [
'yii\db\Query' => 'yii\db\QueryExpressionBuilder',
'yii\db\PdoValue' => 'yii\db\PdoValueBuilder',
'yii\db\Expression' => 'yii\db\ExpressionBuilder',
'yii\db\conditions\ConjunctionCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
'yii\db\conditions\NotCondition' => 'yii\db\conditions\NotConditionBuilder',
'yii\db\conditions\AndCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
'yii\db\conditions\OrCondition' => 'yii\db\conditions\ConjunctionConditionBuilder',
'yii\db\conditions\BetweenCondition' => 'yii\db\conditions\BetweenConditionBuilder',
'yii\db\conditions\InCondition' => 'yii\db\conditions\InConditionBuilder',
'yii\db\conditions\LikeCondition' => 'yii\db\conditions\LikeConditionBuilder',
'yii\db\conditions\ExistsCondition' => 'yii\db\conditions\ExistsConditionBuilder',
'yii\db\conditions\SimpleCondition' => 'yii\db\conditions\SimpleConditionBuilder',
'yii\db\conditions\HashCondition' => 'yii\db\conditions\HashConditionBuilder',
'yii\db\conditions\BetweenColumnsCondition' => 'yii\db\conditions\BetweenColumnsConditionBuilder',
];
}
DELETE SQL ステートメントを作成します。
例:
$sql = $queryBuilder->delete('user', 'status = 0');
このメソッドは、テーブル名とカラム名を適切にエスケープします。
public string delete ( $table, $condition, &$params ) | ||
$table | 文字列 |
データが削除されるテーブル。 |
$condition | array|string |
WHERE部分に配置される条件。条件の指定方法については、yii\db\Query::where()を参照してください。 |
$params | 配列 |
このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。 |
戻り値 | 文字列 |
DELETE SQL |
---|
public function delete($table, $condition, &$params)
{
$sql = 'DELETE FROM ' . $this->db->quoteTableName($table);
$where = $this->buildWhere($condition, $params);
return $where === '' ? $sql : $sql . ' ' . $where;
}
チェック制約を削除するための SQL コマンドを作成します。
public string dropCheck ( $name, $table ) | ||
$name | 文字列 |
削除するチェック制約の名前。この名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
チェック制約を削除するテーブル。この名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
チェック制約を削除するためのSQL文。 |
---|
public function dropCheck($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
DB カラムを削除するための SQL ステートメントを構築します。
public string dropColumn ( $table, $column ) | ||
$table | 文字列 |
カラムが削除されるテーブル。この名前はメソッドによって適切にクォートされます。 |
$column | 文字列 |
削除するカラムの名前。この名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
DBカラムを削除するためのSQL文。 |
---|
public function dropColumn($table, $column)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP COLUMN ' . $this->db->quoteColumnName($column);
}
カラムにコメントを追加するための SQL コマンドを構築します。
public string dropCommentFromColumn ( $table, $column ) | ||
$table | 文字列 |
コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。 |
$column | 文字列 |
コメントが追加されるカラムの名前。カラム名はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
カラムにコメントを追加するためのSQL文 |
---|
public function dropCommentFromColumn($table, $column)
{
return 'COMMENT ON COLUMN ' . $this->db->quoteTableName($table) . '.' . $this->db->quoteColumnName($column) . ' IS NULL';
}
テーブルにコメントを追加するための SQL コマンドを構築します。
public string dropCommentFromTable ( $table ) | ||
$table | 文字列 |
コメントが追加されるカラムを持つテーブル。テーブル名はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
カラムにコメントを追加するためのSQL文 |
---|
public function dropCommentFromTable($table)
{
return 'COMMENT ON TABLE ' . $this->db->quoteTableName($table) . ' IS NULL';
}
デフォルト値制約を削除するための SQL コマンドを作成します。
public string dropDefaultValue ( $name, $table ) | ||
$name | 文字列 |
削除するデフォルト値制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
デフォルト値制約を削除するテーブル。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
デフォルト値制約を削除するためのSQLステートメント。 |
---|---|---|
例外 | yii\base\NotSupportedException |
基盤となるDBMSでサポートされていない場合。 |
public function dropDefaultValue($name, $table)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support dropping default value constraints.');
}
外部キー制約を削除するための SQL ステートメントを構築します。
public string dropForeignKey ( $name, $table ) | ||
$name | 文字列 |
削除する外部キー制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
外部キーを削除するテーブル。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
外部キー制約を削除するためのSQLステートメント。 |
---|
public function dropForeignKey($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
インデックスを削除するための SQL ステートメントを構築します。
public string dropIndex ( $name, $table ) | ||
$name | 文字列 |
削除するインデックスの名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
インデックスを削除するテーブル。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
インデックスを削除するためのSQLステートメント。 |
---|
public function dropIndex($name, $table)
{
return 'DROP INDEX ' . $this->db->quoteTableName($name) . ' ON ' . $this->db->quoteTableName($table);
}
既存のテーブルからプライマリキー制約を削除するための SQL ステートメントを構築します。
public string dropPrimaryKey ( $name, $table ) | ||
$name | 文字列 |
削除する主キー制約の名前。 |
$table | 文字列 |
主キー制約を削除するテーブル。 |
戻り値 | 文字列 |
既存のテーブルから主キー制約を削除するためのSQLステートメント。 |
---|
public function dropPrimaryKey($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
DB テーブルを削除するための SQL ステートメントを構築します。
public string dropTable ( $table ) | ||
$table | 文字列 |
削除するテーブル。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
DBテーブルを削除するためのSQLステートメント。 |
---|
public function dropTable($table)
{
return 'DROP TABLE ' . $this->db->quoteTableName($table);
}
一意制約を削除するための SQL コマンドを作成します。
public string dropUnique ( $name, $table ) | ||
$name | 文字列 |
削除するユニーク制約の名前。名前はメソッドによって適切にクォートされます。 |
$table | 文字列 |
ユニーク制約を削除するテーブル。名前はメソッドによって適切にクォートされます。 |
戻り値 | 文字列 |
ユニーク制約を削除するためのSQLステートメント。 |
---|
public function dropUnique($name, $table)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' DROP CONSTRAINT ' . $this->db->quoteColumnName($name);
}
SQL ビューを削除します。
public string dropView ( $viewName ) | ||
$viewName | 文字列 |
削除するビューの名前。 |
戻り値 | 文字列 |
|
---|
public function dropView($viewName)
{
return 'DROP VIEW ' . $this->db->quoteTableName($viewName);
}
テーブルの主キーのシーケンス値をリセットするSQLステートメントを実行します。
executeである理由は、一部のデータベース(Oracle)ではそうするために複数のクエリが必要なためです。シーケンスは、次に挿入される新しい行の主キーが指定された値または既存の最大値+1になるようにリセットされます。
public void executeResetSequence ( $table, $value = null ) | ||
$table | 文字列 |
主キーシーケンスをリセットするテーブルの名前 |
$value | array|string|null |
次に挿入される新しい行の主キーの値。これが設定されていない場合、次に新しい行の主キーは既存の最大値+1になります。 |
例外 | yii\base\NotSupportedException |
これが基盤となるDBMSでサポートされていない場合 |
---|
public function executeResetSequence($table, $value = null)
{
$this->db->createCommand()->resetSequence($table, $value)->execute();
}
テーブルエイリアスがある場合はそれを抽出し、ない場合はfalseを返します。
protected boolean|array extractAlias ( $table ) | ||
$table |
protected function extractAlias($table)
{
if (preg_match('/^(.*?)(?i:\s+as|)\s+([^ ]+)$/', $table, $matches)) {
return $matches;
}
return false;
}
抽象的なカラム型を物理的なカラム型に変換します。
変換は、$typeMap で指定された型マップを使用して行われます。次の抽象的なカラム型がサポートされています(対応する物理型を説明するためにMySQLを例として使用します)。
pk
: 自動インクリメントのプライマリキー型。 "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。bigpk
: 自動インクリメントのプライマリキー型。 "bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。upk
: 符号なし自動インクリメントのプライマリキー型。 "int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY" に変換されます。char
: char 型。 "char(1)" に変換されます。string
: string 型。 "varchar(255)" に変換されます。text
: 長い string 型。 "text" に変換されます。smallint
: 小さい integer 型。 "smallint(6)" に変換されます。integer
: integer 型。 "int(11)" に変換されます。bigint
: 大きい integer 型。 "bigint(20)" に変換されます。boolean
: boolean 型。 "tinyint(1)" に変換されます。float
: float 型の数値。 "float" に変換されます。decimal
: decimal 型の数値。 "decimal" に変換されます。datetime
: datetime 型。 "datetime" に変換されます。timestamp
: timestamp 型。 "timestamp" に変換されます。time
: time 型。 "time" に変換されます。date
: date 型。 "date" に変換されます。money
: money 型。 "decimal(19,4)" に変換されます。binary
: binary データ型。 "blob" に変換されます。
抽象型がスペースで区切られた2つ以上の部分を含む場合(例:「string NOT NULL」)、最初の部分のみが変換され、残りの部分は変換結果に追加されます。例えば、「string NOT NULL」は「varchar(255) NOT NULL」に変換されます。
一部の抽象型では、型の直後に丸括弧で囲んで長さや精度の制約を指定することもできます。例えば、string(32)
は MySQL データベースでは "varchar(32)" に変換されます。基盤となる DBMS がある型に対してこのような制約をサポートしていない場合、それは無視されます。
$typeMap で型が見つからない場合は、変更せずに返されます。
public string getColumnType ( $type ) | ||
$type | string|yii\db\ColumnSchemaBuilder |
抽象的なカラム型 |
戻り値 | 文字列 |
物理的なカラム型。 |
---|
public function getColumnType($type)
{
if ($type instanceof ColumnSchemaBuilder) {
$type = $type->__toString();
}
if (isset($this->typeMap[$type])) {
return $this->typeMap[$type];
} elseif (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace('/\(.+\)/', '(' . $matches[2] . ')', $this->typeMap[$matches[1]]) . $matches[3];
}
} elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
}
}
return $type;
}
$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];
}
指定された制限が有効かどうかを確認します。
protected boolean hasLimit ( $limit ) | ||
$limit | mixed |
指定された制限 |
戻り値 | boolean |
制限が有効かどうか |
---|
protected function hasLimit($limit)
{
return ($limit instanceof ExpressionInterface) || ctype_digit((string)$limit);
}
定義場所: yii\base\BaseObject::hasMethod()
メソッドが定義されているかどうかを示す値を返します。
デフォルトの実装は、PHP 関数 method_exists()
の呼び出しです。PHP のマジックメソッド __call()
を実装した場合は、このメソッドをオーバーライドできます。
public boolean hasMethod ( $name ) | ||
$name | 文字列 |
メソッド名 |
戻り値 | boolean |
メソッドが定義されているかどうか |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
指定されたオフセットが有効かどうかを確認します。
protected boolean hasOffset ( $offset ) | ||
$offset | mixed |
指定されたオフセット |
戻り値 | boolean |
オフセットが有効かどうか |
---|
protected function hasOffset($offset)
{
return ($offset instanceof ExpressionInterface) || ctype_digit((string)$offset) && (string)$offset !== '0';
}
定義場所: yii\base\BaseObject::hasProperty()
プロパティが定義されているかどうかを示す値を返します。
プロパティは、以下の場合に定義されます。
- クラスが、指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合 (この場合、プロパティ名はケースインセンシティブです)。
- クラスには、指定された名前のメンバー変数があります(
$checkVars
がtrueの場合)。
参考
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | 文字列 |
プロパティ名 |
$checkVars | boolean |
メンバー変数をプロパティとして扱うかどうか |
戻り値 | boolean |
プロパティが定義されているかどうか |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
オブジェクトを初期化します。
このメソッドは、オブジェクトが指定された構成で初期化された後、コンストラクターの最後に呼び出されます。
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 SQLステートメントを作成します。
例えば、`
php $sql = $queryBuilder->insert('user', [
'name' => 'Sam',
'age' => 30,
], $params); `
このメソッドは、テーブル名とカラム名を適切にエスケープします。
public string insert ( $table, $columns, &$params ) | ||
$table | 文字列 |
新しい行が挿入されるテーブル。 |
$columns | array|yii\db\Query |
テーブルに挿入されるカラムデータ(名前 => 値)、または INSERT INTO ... SELECT SQL ステートメントを実行するための Query のインスタンス。Query の引き渡しは、バージョン 2.0.11 から利用可能です。 |
$params | 配列 |
このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。 |
戻り値 | 文字列 |
INSERT SQL |
---|
public function insert($table, $columns, &$params)
{
list($names, $placeholders, $values, $params) = $this->prepareInsertValues($table, $columns, $params);
return 'INSERT INTO ' . $this->db->quoteTableName($table)
. (!empty($names) ? ' (' . implode(', ', $names) . ')' : '')
. (!empty($placeholders) ? ' VALUES (' . implode(', ', $placeholders) . ')' : $values);
}
INSERT INTO ... SELECT SQLステートメントの select-subquery とフィールド名を準備します。
protected array prepareInsertSelectSubQuery ( $columns, $schema, $params = [] ) | ||
$columns | yii\db\Query |
SELECTクエリを表すオブジェクト。 |
$schema | yii\db\Schema |
カラム名を引用符で囲むためのスキーマオブジェクト。 |
$params | 配列 |
生成された SQL ステートメントにバインドされるパラメータ。これらのパラメータは、クエリの構築プロセス中に生成された追加のパラメータとともに結果に含まれます。 |
戻り値 | 配列 |
カラム名、値、およびパラメータの配列。 |
---|---|---|
例外 | yii\base\InvalidArgumentException |
クエリのselectに名前付きパラメータのみが含まれる場合。 |
protected function prepareInsertSelectSubQuery($columns, $schema, $params = [])
{
if (!is_array($columns->select) || empty($columns->select) || in_array('*', $columns->select)) {
throw new InvalidArgumentException('Expected select query object with enumerated (named) parameters');
}
list($values, $params) = $this->build($columns, $params);
$names = [];
$values = ' ' . $values;
foreach ($columns->select as $title => $field) {
if (is_string($title)) {
$names[] = $schema->quoteColumnName($title);
} elseif (preg_match('/^(.*?)(?i:\s+as\s+|\s+)([\w\-_\.]+)$/', $field, $matches)) {
$names[] = $schema->quoteColumnName($matches[2]);
} else {
$names[] = $schema->quoteColumnName($field);
}
}
return [$names, $values, $params];
}
INSERT
SQLステートメントのVALUES
部分を準備します。
protected array prepareInsertValues ( $table, $columns, $params = [] ) | ||
$table | 文字列 |
新しい行が挿入されるテーブル。 |
$columns | array|yii\db\Query |
テーブルに挿入されるカラムデータ(name => value)またはINSERT INTO ... SELECT SQLステートメントを実行するためのQueryのインスタンス。 |
$params | 配列 |
このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。 |
戻り値 | 配列 |
カラム名、プレースホルダー、値、およびパラメータの配列。 |
---|
protected function prepareInsertValues($table, $columns, $params = [])
{
$schema = $this->db->getSchema();
$tableSchema = $schema->getTableSchema($table);
$columnSchemas = $tableSchema !== null ? $tableSchema->columns : [];
$names = [];
$placeholders = [];
$values = ' DEFAULT VALUES';
if ($columns instanceof Query) {
list($names, $values, $params) = $this->prepareInsertSelectSubQuery($columns, $schema, $params);
} else {
foreach ($columns as $name => $value) {
$names[] = $schema->quoteColumnName($name);
$value = isset($columnSchemas[$name]) ? $columnSchemas[$name]->dbTypecast($value) : $value;
if ($value instanceof ExpressionInterface) {
$placeholders[] = $this->buildExpression($value, $params);
} elseif ($value instanceof \yii\db\Query) {
list($sql, $params) = $this->build($value, $params);
$placeholders[] = "($sql)";
} else {
$placeholders[] = $this->bindParam($value, $params);
}
}
}
return [$names, $placeholders, $values, $params];
}
UPDATE
SQLステートメントのSET
部分を準備します。
protected array prepareUpdateSets ( $table, $columns, $params = [] ) | ||
$table | 文字列 |
更新されるテーブル。 |
$columns | 配列 |
更新されるカラムデータ(name => value)。 |
$params | 配列 |
このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。 |
戻り値 | 配列 |
|
---|
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];
}
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)];
}
カラムの名前を変更するためのSQLステートメントを構築します。
public string renameColumn ( $table, $oldName, $newName ) | ||
$table | 文字列 |
カラムの名前が変更されるテーブル。名前はメソッドによって適切に引用符で囲まれます。 |
$oldName | 文字列 |
カラムの古い名前。名前はメソッドによって適切に引用符で囲まれます。 |
$newName | 文字列 |
カラムの新しい名前。名前はメソッドによって適切に引用符で囲まれます。 |
戻り値 | 文字列 |
DBカラムの名前を変更するためのSQLステートメント。 |
---|
public function renameColumn($table, $oldName, $newName)
{
return 'ALTER TABLE ' . $this->db->quoteTableName($table)
. ' RENAME COLUMN ' . $this->db->quoteColumnName($oldName)
. ' TO ' . $this->db->quoteColumnName($newName);
}
DBテーブルの名前を変更するためのSQLステートメントを構築します。
public string renameTable ( $oldName, $newName ) | ||
$oldName | 文字列 |
名前が変更されるテーブル。名前はメソッドによって適切に引用符で囲まれます。 |
$newName | 文字列 |
テーブルの新しい名前。名前はメソッドによって適切に引用符で囲まれます。 |
戻り値 | 文字列 |
DBテーブルの名前を変更するためのSQLステートメント。 |
---|
public function renameTable($oldName, $newName)
{
return 'RENAME TABLE ' . $this->db->quoteTableName($oldName) . ' TO ' . $this->db->quoteTableName($newName);
}
テーブルの主キーのシーケンス値をリセットするためのSQLステートメントを作成します。
シーケンスは、次に挿入される新しい行の主キーが指定された値または既存の最大値+1になるようにリセットされます。
public string resetSequence ( $table, $value = null ) | ||
$table | 文字列 |
主キーシーケンスがリセットされるテーブルの名前 |
$value | array|string|null |
次に挿入される新しい行の主キーの値。これが設定されていない場合、次に新しい行の主キーは既存の最大値+1になります。 |
戻り値 | 文字列 |
シーケンスをリセットするためのSQLステートメント |
---|---|---|
例外 | yii\base\NotSupportedException |
これが基盤となるDBMSでサポートされていない場合 |
public function resetSequence($table, $value = null)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support resetting sequence.');
}
SELECT EXISTS() SQLステートメントを作成します。
public string selectExists ( $rawSql ) | ||
$rawSql | 文字列 |
選択元の生の形式のサブクエリ。 |
戻り値 | 文字列 |
SELECT EXISTS() SQLステートメント。 |
---|
public function selectExists($rawSql)
{
return 'SELECT EXISTS(' . $rawSql . ')';
}
$conditionClasses プロパティのセッター。
$conditionClasses も参照してください。
public void setConditionClasses ( $classes ) | ||
$classes | 文字列[] |
条件エイリアスから条件クラスへのマップ。例:
|
public function setConditionClasses($classes)
{
$this->conditionClasses = array_merge($this->conditionClasses, $classes);
}
$expressionBuilders プロパティのセッター。
$expressionBuilders も参照してください。
public void setExpressionBuilders ( $builders ) | ||
$builders | 文字列[] |
$expressionBuildersプロパティで事前定義されたものとマージされるべきビルダーの配列。 |
public function setExpressionBuilders($builders)
{
$this->expressionBuilders = array_merge($this->expressionBuilders, $builders);
}
DBテーブルを切り捨てるためのSQLステートメントを構築します。
public string truncateTable ( $table ) | ||
$table | 文字列 |
切り捨てられるテーブル。名前はメソッドによって適切に引用符で囲まれます。 |
戻り値 | 文字列 |
DBテーブルを切り捨てるためのSQLステートメント。 |
---|
public function truncateTable($table)
{
return 'TRUNCATE TABLE ' . $this->db->quoteTableName($table);
}
UPDATE SQLステートメントを作成します。
例:
$params = [];
$sql = $queryBuilder->update('user', ['status' => 1], 'age > 30', $params);
このメソッドは、テーブル名とカラム名を適切にエスケープします。
public string update ( $table, $columns, $condition, &$params ) | ||
$table | 文字列 |
更新されるテーブル。 |
$columns | 配列 |
更新されるカラムデータ(name => value)。 |
$condition | array|string |
WHERE部分に配置される条件。条件の指定方法については、yii\db\Query::where()を参照してください。 |
$params | 配列 |
このメソッドによって変更され、後でDBコマンドにバインドできるようにするバインディングパラメータ。 |
戻り値 | 文字列 |
UPDATE SQL を生成します。 |
---|
public function update($table, $columns, $condition, &$params)
{
list($lines, $params) = $this->prepareUpdateSets($table, $columns, $params);
$sql = 'UPDATE ' . $this->db->quoteTableName($table) . ' SET ' . implode(', ', $lines);
$where = $this->buildWhere($condition, $params);
return $where === '' ? $sql : $sql . ' ' . $where;
}
データベーステーブルに、まだ存在しない(一意制約に一致する)行を挿入し、存在する場合は更新するSQLステートメントを作成します。
例:
$sql = $queryBuilder->upsert('pages', [
'name' => 'Front page',
'url' => 'https://example.com/', // url is unique
'visits' => 0,
], [
'visits' => new \yii\db\Expression('visits + 1'),
], $params);
このメソッドは、テーブル名とカラム名を適切にエスケープします。
public string upsert ( $table, $insertColumns, $updateColumns, &$params ) | ||
$table | 文字列 |
新しい行が挿入/更新されるテーブル。 |
$insertColumns | array|yii\db\Query |
テーブルに挿入されるカラムデータ (name => value)。または、 |
$updateColumns | array|boolean |
カラムデータが既に存在する場合に更新されるカラムデータ (name => value)。 |
$params | 配列 |
このメソッドによって生成されるバインディングパラメータ。これらは後で DB コマンドにバインドされる必要があります。 |
戻り値 | 文字列 |
生成された SQL。 |
---|---|---|
例外 | yii\base\NotSupportedException |
基盤となるDBMSでサポートされていない場合。 |
public function upsert($table, $insertColumns, $updateColumns, &$params)
{
throw new NotSupportedException($this->db->getDriverName() . ' does not support upsert statements.');
}
コメントするには、サインアップ または ログイン してください。