ホームページ >バックエンド開発 >PHPチュートリアル >Yii の学習 (3) -- クエリビルダー、yiibuilder_PHP チュートリアル
元のアドレス: http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder
ただし、この章はYiiの公式サイトでは原文が英語で訳されていないので、自分なりに解釈して書いている箇所が多く、完全に訳しているとは限りません。オリジナルのテキスト。 。 。
Yii のクエリ ビルダーは、SQL ステートメントを記述するためのオブジェクト指向の方法を提供します。 これにより、開発者はクラスのメソッドとプロパティを使用して SQL ステートメントのさまざまな部分を指定できます。 その後、有効な SQL ステートメントに組み立てられ、DAO データ アクセス オブジェクトの記述メソッドを呼び出すことでさらに実行できます。 以下は、選択 ステートメント を構築するためのクエリ ビルダー の一般的な使用法を 示しています。 リーリー アプリケーション内で SQL ステートメントのプログラムをアセンブルする必要がある場合、または条件付きロジックに基づいてアセンブルする必要がある場合は、クエリ ビルダーを使用するのが最善です。
Query Builderを使用する主な利点には以下が含まれます: 複雑な SQL ステートメント プログラミングを作成できます。
次のコードは機能しません: リーリー 言い換えると、、
は、通常のSQLとクエリジェネレータを混合しないでください。 1. クエリビルダーの準備 Yii のクエリ ビルダー
は、 CDbCommand から提供されます メイン データベース クエリ クラス 、 データ アクセス オブジェクト を記述する 。 クエリビルダーの使用を開始するには、
CDbCommand、、の新しいインスタンスを作成しました。 リーリー を使用して データベース接続 、
を取得し、次に CDbConnection::createCommand() Yii::app()->db
を呼び出して、必要な コマンド インスタンス を作成します。
SQL ステートメント全体を createcommand() に入れることはデータ アクセス オブジェクトと呼ばれ、それを空に設定する必要があることに注意してください。 これは、以下で説明するように、 クエリ ビルダーを使用して
の各部分に メソッド を追加するためです。 2. 建物データ取得クエリ (建物データ取得クエリ) データ取得クエリは、SQL ステートメントの選択を指します。 クエリ ビルダーは、SELECT ステートメントのさまざまな部分を構築するための一連のメソッドを提供します。 これらのメソッドはすべて CDbCommand
のインスタンス の例に示すように、 メソッド チェーンを使用して を呼び出すことができます。このセクションの 。
在下面,我们将解释如何使用这些查询生成器方法。为简单起见,我们假设底层数据库是MySQL。注意:如果你使用的是其他数据库,表/列/值引用的例子可能是不同的。 该select()方法指定一个查询的选择部分。$columns参数指定要选择的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称。列的名称可以包含表的前缀和 / 或列别名。该方法将自动引用列名,除非一列包含一些括号(这意味着这个列是一个DB的表达式)。 下面是一些例子: selectdistinct()方法类似于select(),除了它打开了 from()方法指定来了一个查询的FROM部分。 下面是一些例子: where()方法指定查询的WHERE。$conditions 参数指定查询条件的同时,$params 指定参数绑定到整个查询。$conditions参数可以是一个字符串(例如id = 1)或一个数组中的格式: 下面是一些例子,使用的地方: 请注意,当操作者含有like时,我们必须明确指定的通配符(如%和_)的模式。如果参数是从用户的输入,我们也应该使用下面的代码转义特殊字符,以防止他们被当作通配符: 用 and 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。 用 or 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。 order() 方法指定查询的ORDER BY部分。 下面是一些例子: limit()和offset()方法指定查询的 下面是一些例子: join()方法及其变种指定如何与其他表连接,使用内部联接,左外连接,右外部联接,交叉连接,或自然连接。 值得注意的是,它不像其他的查询生成器方法,每次调用一个join方法都会追加到SQL中。 下面是一些例子: group() 方法指定查询的GROUP BY。 下面是一些例子: having() 方法指定查询的 HAVING。它的使用方式与 where() 相同。 下面是一些例子: union() 方法指定查询 UNION。它使用UNION操作附加到现有的SQL上。调用union()多次将现有的SQL附加多个表。 下面是一些例子: 调用上面查询生成器的方法来建立一个查询后,我们可以调用DAO方法数据访问对象执行查询。例如,我们可以调用 CDbCommand::queryRow() 获得连续的结果,或者使用 CDbCommand::queryAll() 立刻得到所有行。 例子: 除了执行查询生成器的查询,我们也可以获取相应的SQL语句。这可以通过调用 CDbCommand::getText() 获得。 如果有任何参数必须绑定到查询的,他们可以通过 CDbCommand::params 的属性绑定。 有时,使用方法链来建立一个查询可能不是最佳的选择。Yii的查询生成器允许使用对简单象属性赋值的方式去建立查询。特别是,每个查询生成器的方法都有一个具有相同名称的属性。给属性赋值相当于调用相应的方法。例如,下面两个语句是等价的,假设 此外, CDbConnection::createCommand() 方法可以把一个数组作为参数。数组中的键值对将被用来初始化创建的 CDbCommand 实例的属性。这意味着,我们可以使用下面的代码来建立一个查询: 一个 CDbCommand 实例可以重复使用多次建立几个查询。建立一个新的查询之前,需要调用 CDbCommand::reset() 方法以清理前面的查询。例子: 数据操作查询是指SQL语句插入,更新和删除数据库表中的数据。对应于这些查询,查询生成器分别提供了插入,更新和删除的方法。不同于上面介绍 SELECT 的查询方法,这些数据操作查询方法将建立一个完整的SQL语句,并立即执行。 下面描述了这些数据操作查询方法。 insert()方法的建立和执行一条 INSERT SQL 语句。 下面是一个例子: update()方法的建立和执行一个SQL更新语句。 下面是一个例子: delete()方法的建立和执行一个SQL删除语句。 下面是一个例子: 除了正常的数据检索和操作查询,查询生成器提供了一套用于可以操纵数据库的构建和执行SQL查询的方法。它支持以下操作: Info: 虽然在不同的数据库管理系统中SQL语句操作数据库的模式有很大的不同,但查询生成器试图提供一个统一的接口,用于构建这些查询。这简化了数据库迁移从一个数据库管理系统到另一个任务。 查询生成器中引入了一组可以在定义表的列中使用抽象数据类型。与物理数据类型不同,物理数据类型有具体独特的DBMS而且在不同的DBMS中有很大的不同,抽象数据类型都是独立的DBMS。当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的物理数据类型。 createTable() 方法构建和执行一条创建表的SQL语句。 当指定一个列的定义时,可以使用如上所述的抽象数据类型。查询生成器会根据当前使用的数据库管理系统的抽象数据类型转换成相应的物理数据类型。例如,string 类型将被转换为MySQL的 varchar(255)。 一个列定义还可以包含非抽象数据类型或规格。他们将没有任何改变的被放置在生成的SQL中。例如, 下面是一个例子,显示了如何创建一个表: renameTable() 方法创建和执行一条重命名表名的SQL语句。 下面是一个示例,演示了如何重命名表: dropTable() 方法创建和执行一条删除表的SQL语句。在 下面是一个示例展示如何删除一个表: truncateTable() 方法建立和执行一条清空表数据的SQL语句。 下面是一个示例显示如何清空表: addColumn() 方法创建并执行一条添加一个表的新列的SQL语句。 下面是一个示例,演示如何添加一个表的列: dropColumn() 方法创建和执行一条删除表列的SQL语句。 下面是一个示例展示如何删除一个表列: renameColumn() 方法创建和执行一条重命名列的SQL语句。 下面是一个示例,展示了如何重命名表列: alterColumn() 方法创建和执行一条修改表列的SQL语句。 下面是一个示例,展示了如何更改一个表列: addForeignKey() 方法创建和执行一条添加一个外键约束SQL语句。 下面是一个示例,演示如何添加一个外键约束: dropForeignKey() 方法创建和执行一条删除一个外键约束的SQL语句。 下面是一个示例,显示了如何删除外键约束: createIndex() 方法构建和执行一条创建索引的SQL语句。 下面是一个示例,显示了如何创建索引: dropIndex() 方法创建和执行一条删除索引的SQL语句。 下面是一个示例,显示了如何删除索引: ClickOnce 版本可用于本机模式或 SharePoint 集成模式下安装的 Reporting Services。 字符串需要加引号。
AND
operatorOR
operatorselect()
<span>function</span> select(<span>$columns</span>='*')
<span>//</span><span> SELECT *</span>
<span>select()
</span><span>//</span><span> SELECT `id`, `username`</span>
select('id, username'<span>)
</span><span>//</span><span> SELECT `tbl_user`.`id`, `username` AS `name`</span>
select('tbl_user.id, username as name'<span>)
</span><span>//</span><span> SELECT `id`, `username`</span>
select(<span>array</span>('id', 'username'<span>))
</span><span>//</span><span> SELECT `id`, count(*) as num</span>
select(<span>array</span>('id', 'count(*) as num'))
selectDistinct()
<span>function</span> selectDistinct(<span>$columns</span>)
DISTINCT
的标志。例如,selectdistinct('id,用户名”)会产生以下SQL:<span>SELECT</span> <span>DISTINCT</span> `id`, `username`
from()
<span>function</span> from(<span>$tables</span>)
$tables
参数指定表的选择。这可以是一个字符串,用逗号分隔的表的名称,或表名数组。表的名称可以包含架构前缀(例如公共。tbl_user)和/或表的别名(e.g.tbl_user U)。该方法将自动引用表的名称,除非它包含一些括号(即表是一个给定的子查询或DB的表达式)。<span>//</span><span> FROM `tbl_user`</span>
from('tbl_user'<span>)
</span><span>//</span><span> FROM `tbl_user` `u`, `public`.`tbl_profile` `p`</span>
from('tbl_user u, public.tbl_profile p'<span>)
</span><span>//</span><span> FROM `tbl_user`, `tbl_profile`</span>
from(<span>array</span>('tbl_user', 'tbl_profile'<span>))
</span><span>//</span><span> FROM `tbl_user`, (select * from tbl_profile) p</span>
from(<span>array</span>('tbl_user', '(select * from tbl_profile) p'))
where()
<span>function</span> where(<span>$conditions</span>, <span>$params</span>=<span>array</span>())
<span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-identifier">operator</span><span class="hl-code">, </span><span class="hl-identifier">operand1</span><span class="hl-code">, </span><span class="hl-identifier">operand2</span><span class="hl-code">, ...</span><span class="hl-brackets">)</span>
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连接。<span>//</span><span> WHERE id=1 or id=2</span>
where('id=1 or id=2'<span>)
</span><span>//</span><span> WHERE id=:id1 or id=:id2</span>
where('id=:id1 or id=:id2', <span>array</span>(':id1'=>1, ':id2'=>2<span>))
</span><span>//</span><span> WHERE id=1 OR id=2</span>
where(<span>array</span>('or', 'id=1', 'id=2'<span>))
</span><span>//</span><span> WHERE id=1 AND (type=2 OR type=3)</span>
where(<span>array</span>('and', 'id=1', <span>array</span>('or', 'type=2', 'type=3'<span>)))
</span><span>//</span><span> WHERE `id` IN (1, 2)</span>
where(<span>array</span>('in', 'id', <span>array</span>(1, 2<span>))
</span><span>//</span><span> WHERE `id` NOT IN (1, 2)</span>
where(<span>array</span>('not in', 'id', <span>array</span>(1,2<span>)))
</span><span>//</span><span> WHERE `name` LIKE '%Qiang%'</span>
where(<span>array</span>('like', 'name', '%Qiang%'<span>))
</span><span>//</span><span> WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'</span>
where(<span>array</span>('like', 'name', <span>array</span>('%Qiang', '%Xue'<span>)))
</span><span>//</span><span> WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'</span>
where(<span>array</span>('or like', 'name', <span>array</span>('%Qiang', '%Xue'<span>)))
</span><span>//</span><span> WHERE `name` NOT LIKE '%Qiang%'</span>
where(<span>array</span>('not like', 'name', '%Qiang%'<span>))
</span><span>//</span><span> WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'</span>
where(<span>array</span>('or not like', 'name', <span>array</span>('%Qiang%', '%Xue%')))
<span>$keyword</span>=<span>$_GET</span>['q'<span>];
</span><span>//</span><span> escape % and _ characters</span>
<span>$keyword</span>=<span>strtr</span>(<span>$keyword</span>, <span>array</span>('%'=>'\%', '_'=>'\_'<span>));
</span><span>$command</span>->where(<span>array</span>('like', 'title', '%'.<span>$keyword</span>.'%'));
andWhere()
<span>function</span> andWhere(<span>$conditions</span>, <span>$params</span>=<span>array</span>())
orWhere()
<span>function</span> orWhere(<span>$conditions</span>, <span>$params</span>=<span>array</span>())
order()
<span>function</span> order(<span>$columns</span>)
$columns
参数指定列进行排序,这可以是一个包含用逗号分隔列和order的方向(ASC 或
DESC
)的字符串,或者一个列和order的方向的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即给出一个 DB 表达式)。<span>//</span><span> ORDER BY `name`, `id` DESC</span>
order('name, id desc'<span>)
</span><span>//</span><span> ORDER BY `tbl_profile`.`name`, `id` DESC</span>
order(<span>array</span>('tbl_profile.name', 'id desc'))
limit() and offset()
<span>function</span> limit(<span>$limit</span>, <span>$offset</span>=<span>null</span><span>)
</span><span>function</span> offset(<span>$offset</span>)
LIMIT
和 OFFSET
部分。请注意,某些DBMS不支持 LIMIT
和 OFFSET
语法。在这种情况下,查询生成器将改写整个SQL语句来模拟 LIMIT
和 OFFSET 的
功能。<span>//</span><span> LIMIT 10 取前10条</span>
limit(10<span>)
</span><span>//</span><span> LIMIT 10 OFFSET 20 取到第21~30条</span>
limit(10, 20<span>)
</span><span>//</span><span> OFFSET 20 去掉前20条后剩下的数据</span>
offset(20)
join() and its variants
<span>function</span> <span>join</span>(<span>$table</span>, <span>$conditions</span>, <span>$params</span>=<span>array</span><span>())
</span><span>function</span> leftJoin(<span>$table</span>, <span>$conditions</span>, <span>$params</span>=<span>array</span><span>())
</span><span>function</span> rightJoin(<span>$table</span>, <span>$conditions</span>, <span>$params</span>=<span>array</span><span>())
</span><span>function</span> crossJoin(<span>$table</span><span>)
</span><span>function</span> naturalJoin(<span>$table</span>)
$table
参数指定要加入哪个表。表名可以包含数据库的前缀和 / 或别名。该方法将引用表名,除非它包含一个插入语,即一个DB表达式或子查询。 $conditions
参数指定连接条件。它的语法与where() 相同。$params
参数指定绑定到整个查询的参数。<span>//</span><span> JOIN `tbl_profile` ON user_id=id</span>
<span>join</span>('tbl_profile', 'user_id=id'<span>)
</span><span>//</span><span> LEFT JOIN `pub`.`tbl_profile` `p` ON p.user_id=id AND type=1</span>
leftJoin('pub.tbl_profile p', 'p.user_id=id AND type=:type', <span>array</span>(':type'=>1))
group()
<span>function</span> group(<span>$columns</span>)
$columns
参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即是一个 DB 表达式)。<span>//</span><span> GROUP BY `name`, `id`</span>
group('name, id'<span>)
</span><span>//</span><span> GROUP BY `tbl_profile`.`name`, `id`</span>
group(<span>array</span>('tbl_profile.name', 'id'))
having()
<span>function</span> having(<span>$conditions</span>, <span>$params</span>=<span>array</span>())
<span>//</span><span> HAVING id=1 or id=2</span>
having('id=1 or id=2'<span>)
</span><span>//</span><span> HAVING id=1 OR id=2</span>
having(<span>array</span>('or', 'id=1', 'id=2'))
union()
<span>function</span> union(<span>$sql</span>)
<span>//</span><span> UNION (select * from tbl_profile)</span>
union('select * from tbl_profile')
执行查询(Executing Queries)
<span>$users</span> = Yii::app()->db-><span>createCommand()
</span>->select('*'<span>)
</span>->from('tbl_user'<span>)
</span>->queryAll();
检索表(Retrieving SQLs)
<span>$sql</span> = Yii::app()->db-><span>createCommand()
</span>->select('*'<span>)
</span>->from('tbl_user'<span>)
</span>->text;
建立查询的替代语法(Alternative Syntax for Building Queries)
$command
代表 CDbCommand 对象:<span>$command</span>->select(<span>array</span>('id', 'username'<span>));
</span><span>$command</span>->select = <span>array</span>('id', 'username');
<span>$row</span> = Yii::app()->db->createCommand(<span>array</span><span>(
</span>'select' => <span>array</span>('id', 'username'),
'from' => 'tbl_user',
'where' => 'id=:id',
'params' => <span>array</span>(':id'=>1),<span>
))</span>->queryRow();
建立多个查询(Building Multiple Queries)
<span>$command</span> = Yii::app()->db-><span>createCommand();
</span><span>$users</span> = <span>$command</span>->select('*')->from('tbl_users')-><span>queryAll();
</span><span>$command</span>-><span>reset</span>(); <span>//</span><span> clean up the previous query</span>
<span>$posts</span> = <span>$command</span>->select('*')->from('tbl_posts')->queryAll();
3. 建立数据操作查询(Building Data Manipulation Queries)
insert()
<span>function</span> insert(<span>$table</span>, <span>$columns</span>)
$table
参数指定要插入的表,而键值对数组 $columns
指定要插入的列的值。该方法将转义表名,并且将与绑定参数结合使用。<span>//</span><span> build and execute the following SQL:
// INSERT INTO `tbl_user` (`name`, `email`) VALUES (:name, :email)</span>
<span>$command</span>->insert('tbl_user', <span>array</span><span>(
</span>'name'=>'Tester',
'email'=>'tester@example.com',<span>
));</span>
update()
<span>function</span> update(<span>$table</span>, <span>$columns</span>, <span>$conditions</span>='', <span>$params</span>=<span>array</span>())
$table
参数指定要更新的表; $columns
是键值对的数组,用于指定要更新的列值的;$conditions
和 $params
像where()一样,指定 UPDATE 语句中的 WHERE 子句。该方法将转义表名,并且将与要更新的值的参数结合使用。<span>//</span><span> build and execute the following SQL:
// UPDATE `tbl_user` SET `name`=:name WHERE id=:id</span>
<span>$command</span>->update('tbl_user', <span>array</span><span>(
</span>'name'=>'Tester',<span>
)</span>, 'id=:id', <span>array</span>(':id'=>1));
delete()
<span>function</span> delete(<span>$table</span>, <span>$conditions</span>='', <span>$params</span>=<span>array</span>())
$table
参数指定要删除数据的表;$conditions
和$params
像where()一样,指定 DELETE
语句中的 WHERE 子句。该方法将正确转义表名。<span>//</span><span> build and execute the following SQL:
// DELETE FROM `tbl_user` WHERE id=:id</span>
<span>$command</span>->delete('tbl_user', 'id=:id', <span>array</span>(':id'=>1));
4. 建立架构操作查询(Building Schema Manipulation Queries)
抽象数据类型 Abstract Data Types
下面的抽象数据类型由查询生成器的支持。
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()
<span>function</span> createTable(<span>$table</span>, <span>$columns</span>, <span>$options</span>=<span>null</span>)
$table
参数指定要创建的表的名称。 $columns
参数指定在新表中的列。他们必须被指定为名称类型的键值对(e.g. 'username'=>'string'
)。 $options
参数指定应附加到生成的SQL上的任何额外的SQL片段。查询生成器将正确的引用的表名以及列名。point
不是一个抽象数据类型,如果用在列定义,它会出现在生成的SQL中,而且 string NOT NULL
将被转换varchar(255) NOT NULL(即只有抽象类型的字符串转换)。<span>//</span><span> CREATE TABLE `tbl_user` (
// `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
// `username` varchar(255) NOT NULL,
// `location` point
// ) ENGINE=InnoDB</span>
createTable('tbl_user', <span>array</span><span>(
</span>'id' => 'pk',
'username' => 'string NOT NULL',
'location' => 'point',<span>
)</span>, 'ENGINE=InnoDB')
renameTable()
<span>function</span> renameTable(<span>$table</span>, <span>$newName</span>)
$table 参数
指定要重命名的表的名称。 $newName
参数指定表的新名称。查询生成器将正确引用的表名。<span>//</span><span> RENAME TABLE `tbl_users` TO `tbl_user`</span>
renameTable('tbl_users', 'tbl_user')
dropTable()
<span>function</span> dropTable(<span>$table</span>)
$table
参数指定要删除的表的名称。查询生成器会正确地引用的表名。<span>//</span><span> DROP TABLE `tbl_user`</span>
dropTable('tbl_user')
truncateTable()
<span>function</span> truncateTable(<span>$table</span>)
$table 参数
指定清空的表名。查询生成器会正确地引用的表名。<span>//</span><span> TRUNCATE TABLE `tbl_user`</span>
truncateTable('tbl_user')
addColumn()
<span>function</span> addColumn(<span>$table</span>, <span>$column</span>, <span>$type</span>)
$table 参数
指定新列将被添加到的表的名称。 $column
参数指定新列的名称。 $type
指定新列的定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。<span>//</span><span> ALTER TABLE `tbl_user` ADD `email` varchar(255) NOT NULL</span>
addColumn('tbl_user', 'email', 'string NOT NULL')
dropColumn()
<span>function</span> dropColumn(<span>$table</span>, <span>$column</span>)
$table 参数
指定要被删除的列所属的表名。 $column
参数指定要被删除的列名。查询生成器将正确地引用的表名以及列名。<span>//</span><span> ALTER TABLE `tbl_user` DROP COLUMN `location`</span>
dropColumn('tbl_user', 'location')
renameColumn()
<span>function</span> renameColumn(<span>$table</span>, <span>$name</span>, <span>$newName</span>)
$table 参数
指定要重命名的列所属的表的名称。 $name
参数指定的旧列名。 $newName
指定新的列名。查询生成器将正确地引用的表名以及列名。<span>//</span><span> ALTER TABLE `tbl_users` CHANGE `name` `username` varchar(255) NOT NULL</span>
renameColumn('tbl_user', 'name', 'username')
alterColumn()
<span>function</span> alterColumn(<span>$table</span>, <span>$column</span>, <span>$type</span>)
$table 参数
指定要被改变的列所属的表的名称。 $column
参数指定被改变的列的名称。$type
指定列的新定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。<span>//</span><span> ALTER TABLE `tbl_user` CHANGE `username` `username` varchar(255) NOT NULL</span>
alterColumn('tbl_user', 'username', 'string NOT NULL')
addForeignKey()
<span>function</span> addForeignKey(<span>$name</span>, <span>$table</span>, <span>$columns</span>,
<span>$refTable</span>, <span>$refColumns</span>, <span>$delete</span>=<span>null</span>, <span>$update</span>=<span>null</span>)
$name
参数指定外键的名称。 $table
和 $columns
参数指定外键的表名和列名。如果有多个列,他们应该用逗号字符分隔。 $refTable
和 $refColumns
参数指定表名和列名的外键引用。 $delete
和 $update
参数指定 SQL语句中的 ON DELETE 和ON UPDATE选项。大多数的DBMS都支持这些选项:RESTRICT
, CASCADE
, NO ACTION
, SET DEFAULT
, SET NULL
. 。查询生成器会正确地引用表名,索引名和列名。<span>//</span><span> ALTER TABLE `tbl_profile` ADD CONSTRAINT `fk_profile_user_id`
// FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`)
// ON DELETE CASCADE ON UPDATE CASCADE</span>
addForeignKey('fk_profile_user_id', 'tbl_profile', 'user_id',
'tbl_user', 'id', 'CASCADE', 'CASCADE')
dropForeignKey()
<span>function</span> dropForeignKey(<span>$name</span>, <span>$table</span>)
$name
参数指定的要删除的外键约束的名称。 $table
参数指定外键所属的表的名称。查询生成器将正确地引用的表名以及约束名称。<span>//</span><span> ALTER TABLE `tbl_profile` DROP FOREIGN KEY `fk_profile_user_id`</span>
dropForeignKey('fk_profile_user_id', 'tbl_profile')
createIndex()
<span>function</span> createIndex(<span>$name</span>, <span>$table</span>, <span>$column</span>, <span>$unique</span>=<span>false</span>)
$name
参数指定要创建的索引的名称。$table
参数指定索引所属的表的名称。$column
参数指定要索引的列的名称。 $unique 参数
指定是否创建一个唯一索引。如果索引由多个列,则必须用逗号将它们隔开。查询生成器会正确地引用表名,索引名和列名。<span>//</span><span> CREATE INDEX `idx_username` ON `tbl_user` (`username`)</span>
createIndex('idx_username', 'tbl_user', 'username')
dropIndex()
<span>function</span> dropIndex(<span>$name</span>, <span>$table</span>)
$name
参数指定要删除的索引的名称。$table
参数指定索引所属的表的名称。查询生成器将正确地引用的表名以及索引名称。<span>//</span><span> DROP INDEX `idx_username` ON `tbl_user`</span>
dropIndex('idx_username', 'tbl_user')
如有错误或看不懂的地方,欢迎留言~~
注意Report Builder 3.0 不能安装在基于 Itanium 64 的计算机中。这适用于 Report Builder 3.0 的 ClickOnce 和独立版本。
若要在本机模式下启动报表生成器 ClickOnce,您可单击报表管理器中的
“报表生成器”
按钮,也可以使用指定的 URL。
若要在 SharePoint 集成模式下启动报表生成器,请单击
“新建文档”菜单上的“报表生成器报表”选项。
还可以使用报表生成器的 ClickOnce 版本来在已发布到 SharePoint 的 PowerPivot for Excel 工作簿上创建报表。有关将报表生成器用于 PowerPivot 的详细信息,请参阅 technet.microsoft.com 上的
Create a Reporting Services Report with PowerPivot Data
(使用 PowerPivot 数据创建 Reporting Services 报表)。
在本地计算机上,从“开始”菜单启动报表生成器独立版本。与 ClickOnce 版本(从报表管理器或 SharePoint 库启动)相比,您或管理员必须直接在您的计算机上安装报表生成器,然后您才能使用该工具。在安装 SQL Server 2008 R2 时未安装独立版本;您必须单独下载并安装它。有关详细信息,请参阅
额,你去yii中文网站加群,在群里面问,知道的回答效率有点低。