ホームページ バックエンド開発 PHPチュートリアル Yii クエリビルダー (Query Builder) 使用例チュートリアル

Yii クエリビルダー (Query Builder) 使用例チュートリアル

Jan 21, 2017 am 11:28 AM
yii

この記事は、主にYii Query Builderの使い方を紹介するYii公式サイトの英語ドキュメントの翻訳版です。皆さんの参考に共有してください。詳細は次のとおりです:

まず第一に、Yii のクエリビルダーは、オブジェクト指向の方法で SQL ステートメントを作成する機能を提供します。これにより、開発者はクラスのメソッドとプロパティを使用して SQL ステートメントのさまざまな部分を指定できます。その後、有効な SQL ステートメントにアセンブルされ、DAO データ アクセス オブジェクトの description メソッドを呼び出すことでさらに実行できます。以下は、select ステートメントを構築するためのクエリ ビルダーの一般的な使用法を示しています:

$user = Yii::app()->db->createCommand()
  ->select('id, username, profile')
  ->from('tbl_user u')
  ->join('tbl_profile p', 'u.id=p.user_id')
  ->where('id=:id', array(':id'=>$id))
  ->queryRow();
ログイン後にコピー

アプリケーション内で SQL ステートメントを組み立てる必要がある場合、または条件付きロジックに基づいて SQL ステートメントを組み立てる必要がある場合は、クエリ ビルダーを使用するのが最適です。クエリ ビルダーを使用する利点は主に次のとおりです:

① 複雑な SQL ステートメント プログラミングを作成できます。

②. SQL の予約語や特殊文字との競合を防ぐために、テーブル名と列名を自己参照します。

③. パラメーター値を参照し、パラメーター バインディングを使用することもできるため、SQL インジェクション攻撃のリスクを軽減できます。

④。一定レベルのデータベース抽象化を提供し、異なるデータベース プラットフォームへの移行コストを簡素化します。

クエリビルダーの使用を強制するものではありません。実際、クエリが単純な場合は、SQL ステートメントを直接記述する方が簡単かつ高速です。

注: クエリ ビルダーを使用して、SQL ステートメントとして指定された既存のクエリを変更することはできません。たとえば、次のコードは機能しません:

$command = Yii::app()->db->createCommand('SELECT * FROM tbl_user');
// the following line will NOT append WHERE clause to the above SQL
$command->where('id=:id', array(':id'=>$id));
ログイン後にコピー

つまり、通常の SQL ビルダーとクエリ ビルダーを混合しないでください。

1. クエリビルダーの準備

Yii のクエリビルダーは、データ アクセス オブジェクトを記述する、CDbCommand からのメイン データベース クエリ クラスを提供します。

クエリビルダーの使用を開始するには、CDbCommand の新しいインスタンスを作成します。

$command = Yii::app()->db->createCommand();
ログイン後にコピー

Yii::app()->db を使用してデータベース接続を取得し、CDbConnection::createCommand() を呼び出して必須コマンドの例。

SQL ステートメント全体を createcommand() に入れることはデータ アクセス オブジェクトと呼ばれ、それを空に設定する必要があることに注意してください。これは、以下の説明でクエリ ビルダー メソッドを使用して SQL ステートメントのさまざまな部分を追加するためです。

2. データ取得クエリの構築

データ取得クエリとは、SQL ステートメントの選択を指します。クエリ ビルダーは、SELECT ステートメントのさまざまな部分を構築するための一連のメソッドを提供します。これらのメソッドはすべて CDbCommand のインスタンスを返すため、このセクションの冒頭の例に示すように、メソッド チェーンを使用してメソッドを呼び出すことができます。

select(): 指定查询的选择部分 specifies the SELECT part of the query
selectDistinct(): 指定查询不重复的选择部分 specifies the SELECT part of the query and turns on the DISTINCT flag
from(): 指定查询的FROM specifies the FROM part of the query
where(): 指定查询的WHERE specifies the WHERE part of the query
andWhere(): 用and的方式添加到WHERE的条件中 appends condition to the WHERE part of the query with AND operator
orWhere(): 用or的方式添加到WHERE的条件中 appends condition to the WHERE part of the query with OR operator
join(): 添加一个内部联接的查询片段 appends an inner join query fragment
leftJoin(): 追加一个左外连接查询片段 appends a left outer join query fragment
rightJoin(): 追加一个右外部联接查询片段 appends a right outer join query fragment
crossJoin(): 追加一个交叉连接查询片段 appends a cross join query fragment
naturalJoin(): 追加一个自然连接查询片段 appends a natural join query fragment
group(): 指定查询的GROUP BY specifies the GROUP BY part of the query
having(): 指定查询的HAVING specifies the HAVING part of the query
order(): 指定查询的ORDER BY specifies the ORDER BY part of the query
limit(): 指定查询的LIMIT specifies the LIMIT part of the query
offset(): 指定查询的OFFSET specifies the OFFSET part of the query
union(): 添加查询的UNION appends a UNION query fragment

在下面,我们将解释如何使用这些查询生成器方法。为简单起见,我们假设底层数据库是MySQL。注意:如果你使用的是其他数据库,表/列/值引用的例子可能是不同的。

select()

function select($columns='*')
ログイン後にコピー

该select()方法指定一个查询的选择部分。$columns参数指定要选择的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称。列的名称可以包含表的前缀和 / 或列别名。该方法将自动引用列名,除非一列包含一些括号(这意味着这个列是一个DB的表达式)。

下面是一些例子:

// SELECT *
select()
// SELECT `id`, `username`
select('id, username')
// SELECT `tbl_user`.`id`, `username` AS `name`
select('tbl_user.id, username as name')
// SELECT `id`, `username`
select(array('id', 'username'))
// SELECT `id`, count(*) as num
select(array('id', 'count(*) as num'))
ログイン後にコピー

selectDistinct()

function selectDistinct($columns)
ログイン後にコピー

selectdistinct()方法类似于select(),除了它打开了 DISTINCT 的标志。例如,selectdistinct('id,用户名”)会产生以下SQL:

SELECT DISTINCT `id`, `username`
ログイン後にコピー

from()

function from($tables)
ログイン後にコピー

from()方法指定来了一个查询的FROM部分。 $tables 参数指定表的选择。这可以是一个字符串,用逗号分隔的表的名称,或表名数组。表的名称可以包含架构前缀(例如公共。tbl_user)和/或表的别名(e.g.tbl_user U)。该方法将自动引用表的名称,除非它包含一些括号(即表是一个给定的子查询或DB的表达式)。

下面是一些例子:

// FROM `tbl_user`
from('tbl_user')
// FROM `tbl_user` `u`, `public`.`tbl_profile` `p`
from('tbl_user u, public.tbl_profile p')
// FROM `tbl_user`, `tbl_profile`
from(array('tbl_user', 'tbl_profile'))
// FROM `tbl_user`, (select * from tbl_profile) p
from(array('tbl_user', '(select * from tbl_profile) p'))
ログイン後にコピー

where()

function where($conditions, $params=array())
ログイン後にコピー

where()方法指定查询的WHERE。$conditions 参数指定查询条件的同时,$params 指定参数绑定到整个查询。$conditions参数可以是一个字符串(例如id = 1)或一个数组中的格式:

array(operator, operand1, operand2, ...)
operator 可以是以下的任何一个:

①.and: operands 应该使用 and 连接在一起。例如, array('and', 'id=1', 'id=2') 将产生 id=1 AND id=2 。如果一个操作数是一个数组,它将使用这里描述的相同规则转换成一个字符串。例如,array('and', 'type=1', array('or', 'id=1', 'id=2')) 将生成 type=1 AND (id=1 OR id=2)。

②.or: 类似 and 操作,除了operands 是使用 OR 连接的。

③.in: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('in', 'id', array(1,2,3)) 将生成 id IN (1,2,3)。

④.not in: 类似 in 操作,除了用 NOT IN 代替 IN 去生成SQL。

⑤.like: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('like', 'name', '%tester%') 会生成 name LIKE '%tester%'。当规定值的范围为一个数组时,多个 LIKE 生成SQL时会用 AND 连接。例如,array('like', 'name', array('%test%', '%sample%')) 会生成 name LIKE '%test%' AND name LIKE '%sample%'。

⑥.not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE 去生成SQL。

⑦.or like: 类似 like 的操作,除了多个 like 生成 SQL 时用OR连接。

⑧.or not like: 类似 not like 的操作,除了多个 like 生成 SQL 时用OR连接。

下面是一些例子,使用的地方:

// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
// WHERE id=1 OR id=2
where(array('or', 'id=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))
ログイン後にコピー

请注意,当操作者含有like时,我们必须明确指定的通配符(如%和_)的模式。如果参数是从用户的输入,我们也应该使用下面的代码转义特殊字符,以防止他们被当作通配符:

$keyword=$_GET['q'];
// escape % and _ characters
$keyword=strtr($keyword, array('%'=>'\%', '_'=>'\_'));
$command->where(array('like', 'title', '%'.$keyword.'%'));
ログイン後にコピー

andWhere()

function andWhere($conditions, $params=array())
ログイン後にコピー

用and 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

orWhere()

function orWhere($conditions, $params=array())
ログイン後にコピー

用 or 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

order()

function order($columns)
ログイン後にコピー

order() 方法指定查询的ORDER BY部分。$columns 参数指定列进行排序,这可以是一个包含用逗号分隔列和order的方向(ASC 或 DESC)的字符串,或者一个列和order的方向的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即给出一个 DB 表达式)。

下面是一些例子:

// ORDER BY `name`, `id` DESC
order('name, id desc')
// ORDER BY `tbl_profile`.`name`, `id` DESC
order(array('tbl_profile.name', 'id desc'))
ログイン後にコピー

limit() and offset()

function limit($limit, $offset=null)
function offset($offset)
ログイン後にコピー

limit()和offset()方法指定查询的 LIMIT 和 OFFSET 部分。请注意,某些DBMS不支持 LIMIT 和 OFFSET 语法。在这种情况下,查询生成器将改写整个SQL语句来模拟 LIMIT 和 OFFSET 的功能。

下面是一些例子:

// LIMIT 10  取前10条
limit(10)
// LIMIT 10 OFFSET 20  取到第21~30条
limit(10, 20)
// OFFSET 20  去掉前20条后剩下的数据
offset(20)
ログイン後にコピー

join() and its variants

function join($table, $conditions, $params=array())
function leftJoin($table, $conditions, $params=array())
function rightJoin($table, $conditions, $params=array())
function crossJoin($table)
function naturalJoin($table)
ログイン後にコピー

join()方法及其变种指定如何与其他表连接,使用内部联接,左外连接,右外部联接,交叉连接,或自然连接。 $table 参数指定要加入哪个表。表名可以包含数据库的前缀和 / 或别名。该方法将引用表名,除非它包含一个插入语,即一个DB表达式或子查询。 $conditions 参数指定连接条件。它的语法与where() 相同。$params 参数指定绑定到整个查询的参数。

值得注意的是,它不像其他的查询生成器方法,每次调用一个join方法都会追加到SQL中。

下面是一些例子:

// JOIN `tbl_profile` ON user_id=id
join('tbl_profile', 'user_id=id')
// LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND type=1
leftJoin('pub.tbl_profile p', 'p.user_id=id AND type=:type', array(':type'=>1))
ログイン後にコピー

group()

function group($columns)
ログイン後にコピー

group() 方法指定查询的GROUP BY。 $columns 参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即是一个 DB 表达式)。

下面是一些例子:

// GROUP BY `name`, `id`
group('name, id')
// GROUP BY `tbl_profile`.`name`, `id`
group(array('tbl_profile.name', 'id'))
ログイン後にコピー

having()

function having($conditions, $params=array())
ログイン後にコピー

having() 方法指定查询的 HAVING。它的使用方式与 where() 相同。

下面是一些例子:

// HAVING id=1 or id=2
having('id=1 or id=2')
// HAVING id=1 OR id=2
having(array('or', 'id=1', 'id=2'))
ログイン後にコピー

union()

function union($sql)
ログイン後にコピー

union() 方法指定查询 UNION。它使用UNION操作附加到现有的SQL上。调用union()多次将现有的SQL附加多个表。

下面是一些例子:

// UNION (select * from tbl_profile)
union('select * from tbl_profile')
ログイン後にコピー

执行查询(Executing Queries)

调用上面查询生成器的方法来建立一个查询后,我们可以调用DAO方法数据访问对象执行查询。例如,我们可以调用 CDbCommand::queryRow() 获得连续的结果,或者使用 CDbCommand::queryAll() 立刻得到所有行。

例子:

$users = Yii::app()->db->createCommand()
  ->select('*')
  ->from('tbl_user')
  ->queryAll();
ログイン後にコピー

检索表(Retrieving SQLs)

除了执行查询生成器的查询,我们也可以获取相应的SQL语句。这可以通过调用 CDbCommand::getText() 获得。

$sql = Yii::app()->db->createCommand()
  ->select('*')
  ->from('tbl_user')
  ->text;
ログイン後にコピー

如果有任何参数必须绑定到查询的,他们可以通过 CDbCommand::params 的属性绑定。

建立查询的替代语法(Alternative Syntax for Building Queries)

有时,使用方法链来建立一个查询可能不是最佳的选择。Yii的查询生成器允许使用对简单象属性赋值的方式去建立查询。特别是,每个查询生成器的方法都有一个具有相同名称的属性。给属性赋值相当于调用相应的方法。例如,下面两个语句是等价的,假设$command 代表 CDbCommand 对象:

$command->select(array('id', 'username'));
$command->select = array('id', 'username');
ログイン後にコピー

此外, CDbConnection::createCommand() 方法可以把一个数组作为参数。数组中的键值对将被用来初始化创建的 CDbCommand 实例的属性。这意味着,我们可以使用下面的代码来建立一个查询:

$row = Yii::app()->db->createCommand(array(
  'select' => array('id', 'username'),
  'from' => 'tbl_user',
  'where' => 'id=:id',
  'params' => array(':id'=>1),
))->queryRow();
ログイン後にコピー

建立多个查询(Building Multiple Queries)

一个 CDbCommand 实例可以重复使用多次建立几个查询。建立一个新的查询之前,需要调用 CDbCommand::reset() 方法以清理前面的查询。例子:

$command = Yii::app()->db->createCommand();
$users = $command->select('*')->from('tbl_users')->queryAll();
$command->reset(); // clean up the previous query
$posts = $command->select('*')->from('tbl_posts')->queryAll();
ログイン後にコピー

3. 建立数据操作查询(Building Data Manipulation Queries)

数据操作查询是指SQL语句插入,更新和删除数据库表中的数据。对应于这些查询,查询生成器分别提供了插入,更新和删除的方法。不同于上面介绍 SELECT 的查询方法,这些数据操作查询方法将建立一个完整的SQL语句,并立即执行。

insert(): 将行插入到表
update(): 更新表中的数据
delete(): 从表中删除数据
下面描述了这些数据操作查询方法。

insert()

function insert($table, $columns)
ログイン後にコピー

insert()方法的建立和执行一条 INSERT SQL 语句。 $table 参数指定要插入的表,而键值对数组 $columns 指定要插入的列的值。该方法将转义表名,并且将与绑定参数结合使用。

下面是一个例子:

// build and execute the following SQL:
// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)
$command->insert('tbl_user', array(
  'name'=>'Tester',
  'email'=>'tester@example.com',
));
ログイン後にコピー

update()

function update($table, $columns, $conditions='', $params=array())
ログイン後にコピー

update()方法的建立和执行一个SQL更新语句。 $table 参数指定要更新的表; $columns 是键值对的数组,用于指定要更新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE 语句中的 WHERE 子句。该方法将转义表名,并且将与要更新的值的参数结合使用。

下面是一个例子:

// build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id
$command->update('tbl_user', array(
  'name'=>'Tester',
), 'id=:id', array(':id'=>1));
ログイン後にコピー

delete()

function delete($table, $conditions='', $params=array())
ログイン後にコピー

delete()方法的建立和执行一个SQL删除语句。 $table 参数指定要删除数据的表;$conditions 和$params像where()一样,指定 DELETE 语句中的 WHERE 子句。该方法将正确转义表名。

下面是一个例子:

// build and execute the following SQL:
// DELETE FROM `tbl_user` WHERE id=:id
$command->delete('tbl_user', 'id=:id', array(':id'=>1));
ログイン後にコピー

4. 建立架构操作查询(Building Schema Manipulation Queries)

除了正常的数据检索和操作查询,查询生成器提供了一套用于可以操纵数据库的构建和执行SQL查询的方法。它支持以下操作:

createTable(): 创建一个表
renameTable(): 重命名表
dropTable(): 删除一个表
truncateTable(): 截断一个表,即删除表中的所有数据但不删除表本身
addColumn(): 给表添加列
renameColumn(): 重命名表中的列
alterColumn(): 改变一个表的列
addForeignKey(): 添加一个外键(自1.1.6可用)
dropForeignKey(): 删除一个外键(自1.1.6可用)
dropColumn(): 删除一个表的列
createIndex(): 创建一个索引
dropIndex(): 删除一个索引

Info: 虽然在不同的数据库管理系统中SQL语句操作数据库的模式有很大的不同,但查询生成器试图提供一个统一的接口,用于构建这些查询。这简化了数据库迁移从一个数据库管理系统到另一个任务。

抽象数据类型 Abstract Data Types

查询生成器中引入了一组可以在定义表的列中使用抽象数据类型。与物理数据类型不同,物理数据类型有具体独特的DBMS而且在不同的DBMS中有很大的不同,抽象数据类型都是独立的DBMS。当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的物理数据类型。

下面的抽象数据类型由查询生成器的支持。

pk: 一个通用的主键类型,将被转换成 int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY for MySQL;
string: 字符串类型,将被转换成 varchar(255) for MySQL;
text: 文本型(长字符串),将被转换成 text for MySQL;
integer: 整数类型,将被转换成 int(11) for MySQL;
float: 浮点数类型,将被转换成 float for MySQL;
decimal: 十进制数类型,将被转换成 decimal for MySQL;
datetime: datetime类型,将被转换成 datetime for MySQL;
timestamp: 时间戳类型,将被转换成 timestamp for MySQL;
time: 时间类型,将被转换成 time for MySQL;
date: 日期类型,将被转换成 date for MySQL;
binary: 二进制数据类型,将被转换成 blob for MySQL;
boolean: 布尔类型,将被转换成 tinyint(1) for MySQL;
money: 金钱/货币型,将被转换成 decimal(19,4) for MySQL. 自1.1.8版本开始此类型可以使用。

createTable()

function createTable($table, $columns, $options=null)
ログイン後にコピー

createTable() 方法构建和执行一条创建表的SQL语句。$table 参数指定要创建的表的名称。 $columns 参数指定在新表中的列。他们必须被指定为名称类型的键值对(e.g. 'username'=>'string')。 $options 参数指定应附加到生成的SQL上的任何额外的SQL片段。查询生成器将正确的引用的表名以及列名。

当指定一个列的定义时,可以使用如上所述的抽象数据类型。查询生成器会根据当前使用的数据库管理系统的抽象数据类型转换成相应的物理数据类型。例如,string 类型将被转换为MySQL的 varchar(255)。

一个列定义还可以包含非抽象数据类型或规格。他们将没有任何改变的被放置在生成的SQL中。例如,point 不是一个抽象数据类型,如果用在列定义,它会出现在生成的SQL中,而且 string NOT NULL将被转换varchar(255) NOT NULL(即只有抽象类型的字符串转换)。

下面是一个例子,显示了如何创建一个表:

// CREATE TABLE `tbl_user` (
//   `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
//   `username` varchar(255) NOT NULL,
//   `location` point
// ) ENGINE=InnoDB
createTable('tbl_user', array(
  'id' => 'pk',
  'username' => 'string NOT NULL',
  'location' => 'point',
), 'ENGINE=InnoDB')
ログイン後にコピー

renameTable()

function renameTable($table, $newName)
ログイン後にコピー

renameTable() 方法创建和执行一条重命名表名的SQL语句。 $table 参数指定要重命名的表的名称。 $newName 参数指定表的新名称。查询生成器将正确引用的表名。

下面是一个示例,演示了如何重命名表:

// RENAME TABLE `tbl_users` TO `tbl_user`
renameTable('tbl_users', 'tbl_user')
ログイン後にコピー

dropTable()

function dropTable($table)
ログイン後にコピー

dropTable() 方法创建和执行一条删除表的SQL语句。在$table 参数指定要删除的表的名称。查询生成器会正确地引用的表名。

下面是一个示例展示如何删除一个表:

// DROP TABLE `tbl_user`
dropTable('tbl_user')
ログイン後にコピー

truncateTable()

function truncateTable($table)
ログイン後にコピー

truncateTable() 方法建立和执行一条清空表数据的SQL语句。 $table 参数指定清空的表名。查询生成器会正确地引用的表名。

下面是一个示例显示如何清空表:

// TRUNCATE TABLE `tbl_user`
truncateTable('tbl_user')
ログイン後にコピー

addColumn()

function addColumn($table, $column, $type)
ログイン後にコピー

addColumn() 方法创建并执行一条添加一个表的新列的SQL语句。 $table 参数指定新列将被添加到的表的名称。 $column 参数指定新列的名称。 $type 指定新列的定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。

下面是一个示例,演示如何添加一个表的列:

// ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL
addColumn('tbl_user', 'email', 'string NOT NULL')
ログイン後にコピー

dropColumn()

function dropColumn($table, $column)
ログイン後にコピー

dropColumn() 方法创建和执行一条删除表列的SQL语句。 $table 参数指定要被删除的列所属的表名。 $column 参数指定要被删除的列名。查询生成器将正确地引用的表名以及列名。

下面是一个示例展示如何删除一个表列:

// ALTER TABLE `tbl_user` DROP COLUMN `location`
dropColumn('tbl_user', 'location')
ログイン後にコピー

renameColumn()

function renameColumn($table, $name, $newName)
ログイン後にコピー

renameColumn() 方法创建和执行一条重命名列的SQL语句。 $table 参数指定要重命名的列所属的表的名称。 $name 参数指定的旧列名。 $newName 指定新的列名。查询生成器将正确地引用的表名以及列名。

下面是一个示例,展示了如何重命名表列:

// ALTER TABLE `tbl_users` CHANGE `name` `username` varchar(255) NOT NULL
renameColumn('tbl_user', 'name', 'username')
ログイン後にコピー

alterColumn()

function alterColumn($table, $column, $type)
ログイン後にコピー

alterColumn() 方法创建和执行一条修改表列的SQL语句。 $table 参数指定要被改变的列所属的表的名称。 $column 参数指定被改变的列的名称。$type 指定列的新定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。

下面是一个示例,展示了如何更改一个表列:

// ALTER TABLE `tbl_user` CHANGE `username` `username` varchar(255) NOT NULL
alterColumn('tbl_user', 'username', 'string NOT NULL')
ログイン後にコピー

addForeignKey()

function addForeignKey($name, $table, $columns,$refTable, $refColumns, $delete=null, $update=null)
ログイン後にコピー

addForeignKey() 方法创建和执行一条添加一个外键约束SQL语句。 $name 参数指定外键的名称。 $table 和 $columns 参数指定外键的表名和列名。如果有多个列,他们应该用逗号字符分隔。 $refTable 和 $refColumns 参数指定表名和列名的外键引用。 $delete 和 $update 参数指定 SQL语句中的 ON DELETE 和ON UPDATE选项。大多数的DBMS都支持这些选项:RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL. 。查询生成器会正确地引用表名,索引名和列名。

下面是一个示例,演示如何添加一个外键约束:

// ALTER TABLE `tbl_profile` ADD CONSTRAINT `fk_profile_user_id`
// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
// ON DELETE CASCADE ON UPDATE CASCADE
addForeignKey('fk_profile_user_id', 'tbl_profile', 'user_id', 'tbl_user', 'id', 'CASCADE', 'CASCADE')
ログイン後にコピー

dropForeignKey()

function dropForeignKey($name, $table)
ログイン後にコピー

dropForeignKey() 方法创建和执行一条删除一个外键约束的SQL语句。 $name 参数指定的要删除的外键约束的名称。 $table 参数指定外键所属的表的名称。查询生成器将正确地引用的表名以及约束名称。

下面是一个示例,显示了如何删除外键约束:

// ALTER TABLE `tbl_profile` DROP FOREIGN KEY `fk_profile_user_id`
dropForeignKey('fk_profile_user_id', 'tbl_profile')
ログイン後にコピー

createIndex()

function createIndex($name, $table, $column, $unique=false)
ログイン後にコピー

createIndex() 方法构建和执行一条创建索引的SQL语句。 $name 参数指定要创建的索引的名称。$table 参数指定索引所属的表的名称。$column 参数指定要索引的列的名称。 $unique 参数指定是否创建一个唯一索引。如果索引由多个列,则必须用逗号将它们隔开。查询生成器会正确地引用表名,索引名和列名。

下面是一个示例,显示了如何创建索引:

// CREATE INDEX `idx_username` ON `tbl_user` (`username`)
createIndex('idx_username', 'tbl_user', 'username')
ログイン後にコピー

dropIndex()

function dropIndex($name, $table)
ログイン後にコピー

dropIndex() 方法创建和执行一条删除索引的SQL语句。 $name 参数指定要删除的索引的名称。$table 参数指定索引所属的表的名称。查询生成器将正确地引用的表名以及索引名称。

下面是一个示例,显示了如何删除索引:

// DROP INDEX `idx_username` ON `tbl_user`
dropIndex('idx_username', 'tbl_user')
ログイン後にコピー

希望本文所述对大家yii学习有所帮助。

更多Yii查询生成器(Query Builder)用法实例教程相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでYii3フレームワークを使用するにはどうすればよいですか? PHPでYii3フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 10:42 PM

インターネットの発展に伴い、Web アプリケーション開発の需要もますます高まっています。開発者にとって、アプリケーションの開発には、開発効率を向上させる、安定性、効率性、強力なフレームワークが必要です。 Yii は、豊富な機能と優れたパフォーマンスを提供する、優れた高性能 PHP フレームワークです。 Yii3 は Yii フレームワークの次世代バージョンであり、Yii2 に基づいてパフォーマンスとコード品質をさらに最適化します。この記事では、Yii3 フレームワークを使用して PHP アプリケーションを開発する方法を紹介します。

PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 PHP フレームワーク Yii を使用して可用性の高いクラウド バックアップ システムを開発する方法 Jun 27, 2023 am 09:04 AM

クラウド コンピューティング テクノロジの継続的な発展により、データのバックアップはすべての企業が行う必要のあるものになりました。この文脈では、可用性の高いクラウド バックアップ システムを開発することが特に重要です。 PHP フレームワーク Yii は、開発者が高性能の Web アプリケーションを迅速に構築できる強力なフレームワークです。ここでは、Yii フレームワークを使用して可用性の高いクラウド バックアップ システムを開発する方法を紹介します。データベースモデルの設計 Yii フレームワークでは、データベースモデルは非常に重要な部分です。データ バックアップ システムには多くのテーブルとリレーションシップが必要なため、

Yii2 と Phalcon: グラフィック レンダリング アプリケーションの開発にはどちらのフレームワークが適していますか? Yii2 と Phalcon: グラフィック レンダリング アプリケーションの開発にはどちらのフレームワークが適していますか? Jun 19, 2023 am 08:09 AM

現在の情報化時代では、ビッグデータ、人工知能、クラウド コンピューティング、その他のテクノロジーが大手企業の焦点となっています。その中でも、高性能なグラフィックス処理技術として、グラフィックスカードレンダリング技術がますます注目を集めています。グラフィックス カード レンダリング テクノロジは、ゲーム開発、映画やテレビの特殊効果、エンジニアリング モデリングなどの分野で広く使用されています。開発者にとって、自分のプロジェクトに合ったフレームワークを選択することは非常に重要な決定です。現在の言語の中でも PHP は非常に動的な言語であり、Yii2、Ph などの優れた PHP フレームワークもいくつかあります。

Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Symfony と Yii2: 大規模な Web アプリケーションの開発にはどちらのフレームワークが適していますか? Jun 19, 2023 am 10:57 AM

Web アプリケーションの需要が高まるにつれ、開発者が開発フレームワークを選択する選択肢はますます増えています。 PHP フレームワークとして人気のある Symfony と Yii2 は、どちらも強力な機能とパフォーマンスを備えていますが、大規模な Web アプリケーションを開発する必要がある場合、どちらのフレームワークがより適しているのでしょうか。次に、より良い選択を行うために、Symphony と Yii2 の比較分析を行います。基本概要 Symphony は、PHP で書かれたオープンソースの Web アプリケーション フレームワークであり、上に構築されています。

Yii フレームワークでのデータクエリ: データに効率的にアクセスする Yii フレームワークでのデータクエリ: データに効率的にアクセスする Jun 21, 2023 am 11:22 AM

Yii フレームワークは、Web アプリケーション開発のプロセスを簡素化するための多数のツールとコンポーネントを提供するオープンソースの PHP Web アプリケーション フレームワークであり、その重要なコンポーネントの 1 つがデータ クエリです。 Yii フレームワークでは、SQL に似た構文を使用してデータベースにアクセスし、データを効率的にクエリおよび操作できます。 Yii フレームワークのクエリビルダーには主に次の種類があります: ActiveRecord クエリ、QueryBuilder クエリ、コマンド クエリ、独自の SQL クエリ

yii オブジェクトを配列に変換するか、json 形式に直接出力する方法 yii オブジェクトを配列に変換するか、json 形式に直接出力する方法 Jan 08, 2021 am 10:13 AM

Yiiフレームワーク:Yiiのオブジェクトを配列に変換したり、直接json形式に出力したりする方法を紹介する記事であり、参考になると思います。

Yii2 プログラミングガイド: Cron サービスの実行方法 Yii2 プログラミングガイド: Cron サービスの実行方法 Sep 01, 2023 pm 11:21 PM

「Yii とは何ですか?」という質問がある場合は、私の以前のチュートリアル「Yii フレームワークの紹介」を参照してください。このチュートリアルでは、Yii の利点をレビューし、2014 年 10 月にリリースされた Yii 2.0 の新機能の概要を説明しています。うーん> この Yii2 によるプログラミング シリーズでは、読者に Yii2PHP フレームワークの使い方をガイドします。今日のチュートリアルでは、Yii のコンソール機能を活用して cron ジョブを実行する方法を共有します。以前、私はバックグラウンド タスクを実行するために cron ジョブで wget (Web アクセス可能な URL) を使用しました。これにより、セキュリティ上の懸念が生じ、パフォーマンス上の問題も発生します。 Security for Startup シリーズでリスクを軽減するいくつかの方法について説明しましたが、コンソール駆動のコマンドに移行したいと考えていました。

Yii フレームワークのフォームビルダー: 複雑なフォームの構築 Yii フレームワークのフォームビルダー: 複雑なフォームの構築 Jun 21, 2023 am 10:09 AM

インターネットの急速な発展に伴い、Web アプリケーションはますます人々の生活に欠かせないものになってきています。フォームは Web アプリケーションに不可欠な要素の 1 つであり、Web アプリケーションがユーザーに適切にサービスを提供できるようにユーザー データを収集するために使用されます。 Yii フレームワークは、開発者が Web アプリケーションをより迅速に開発できるようにする、高速、効率的、柔軟な PHP フレームワークです。 Yii フレームワークのフォームビルダー (FormBuilder) を使用すると、開発者は複雑なフォームを簡単に構築できるため、Web アプリケーションがより優れたものになります。

See all articles