mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	resolve conflict
This commit is contained in:
		@ -68,11 +68,7 @@ $foo->on(Foo::EVENT_HELLO, function ($event) {
 | 
				
			|||||||
事件处理器顺序
 | 
					事件处理器顺序
 | 
				
			||||||
-----------------
 | 
					-----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<<<<<<< .merge_file_a01132
 | 
					 | 
				
			||||||
可以附加一个或多个处理器到一个事件。当事件被触发,已附加的处理器将按附加次序依次调用。如果某个处理器需要停止其后的处理器调用,可以设置 `$event` 参数的 [yii\base\Event::handled]] 属性为真,如下:
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
可以附加一个或多个处理器到一个事件。当事件被触发,已附加的处理器将按附加次序依次调用。如果某个处理器需要停止其后的处理器调用,可以设置 `$event` 参数的 [[yii\base\Event::handled]] 属性为真,如下:
 | 
					可以附加一个或多个处理器到一个事件。当事件被触发,已附加的处理器将按附加次序依次调用。如果某个处理器需要停止其后的处理器调用,可以设置 `$event` 参数的 [[yii\base\Event::handled]] 属性为真,如下:
 | 
				
			||||||
>>>>>>> .merge_file_a06216
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
$foo->on(Foo::EVENT_HELLO, function ($event) {
 | 
					$foo->on(Foo::EVENT_HELLO, function ($event) {
 | 
				
			||||||
@ -113,11 +109,7 @@ class Foo extends Component
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
以上代码当调用 `bar()` ,它将触发名为 `hello` 的事件。
 | 
					以上代码当调用 `bar()` ,它将触发名为 `hello` 的事件。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<<<<<<< .merge_file_a01132
 | 
					 | 
				
			||||||
> 提示:推荐使用类常量来表示事件名。上例中,常量 `EVENT_HELLO` 用来表示 `hello` 。这有两个好处。第一,它可以防止拼写错误并支持 IDE 的自动完成。第二,只要简单检查常量声明就能了解一个类支持哪些事件。
 | 
					> 提示:推荐使用类常量来表示事件名。上例中,常量 `EVENT_HELLO` 用来表示 `hello` 。这有两个好处。第一,它可以防止拼写错误并支持 IDE 的自动完成。第二,只要简单检查常量声明就能了解一个类支持哪些事件。
 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
> Tip: 推荐使用类常量来表示事件名。上例中,常量 `EVENT_HELLO` 用来表示 `hello` 。这有两个好处。第一,它可以防止拼写错误并支持 IDE 的自动完成。第二,只要简单检查常量声明就能了解一个类支持哪些事件。
 | 
					 | 
				
			||||||
>>>>>>> .merge_file_a06216
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
有时想要在触发事件时同时传递一些额外信息到事件处理器。例如,邮件程序要传递消息信息到 `messageSent` 事件的处理器以便处理器了解哪些消息被发送了。为此,可以提供一个事件对象作为 [[yii\base\Component::trigger()]] 方法的第二个参数。这个事件对象必须是 [[yii\base\Event]] 类或其子类的实例。如:
 | 
					有时想要在触发事件时同时传递一些额外信息到事件处理器。例如,邮件程序要传递消息信息到 `messageSent` 事件的处理器以便处理器了解哪些消息被发送了。为此,可以提供一个事件对象作为 [[yii\base\Component::trigger()]] 方法的第二个参数。这个事件对象必须是 [[yii\base\Event]] 类或其子类的实例。如:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -212,11 +204,7 @@ Event::trigger(Foo::className(), Foo::EVENT_HELLO);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
注意这种情况下 `$event->sender` 指向触发事件的类名而不是对象实例。
 | 
					注意这种情况下 `$event->sender` 指向触发事件的类名而不是对象实例。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<<<<<<< .merge_file_a01132
 | 
					 | 
				
			||||||
> 注意:因为类级别的处理器响应类和其子类的所有实例触发的事件,必须谨慎使用,尤其是底层的基类,如 [[yii\base\Object]]。
 | 
					> 注意:因为类级别的处理器响应类和其子类的所有实例触发的事件,必须谨慎使用,尤其是底层的基类,如 [[yii\base\Object]]。
 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
> Note: 因为类级别的处理器响应类和其子类的所有实例触发的事件,必须谨慎使用,尤其是底层的基类,如 [[yii\base\Object]]。
 | 
					 | 
				
			||||||
>>>>>>> .merge_file_a06216
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
移除类级别的事件处理器只需调用[[yii\base\Event::off()]],如:
 | 
					移除类级别的事件处理器只需调用[[yii\base\Event::off()]],如:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,26 +1,20 @@
 | 
				
			|||||||
Active Record
 | 
					Active Record
 | 
				
			||||||
=============
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Note: 该章节还在开发中。
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Active Record](http://zh.wikipedia.org/wiki/Active_Record) (活动记录,以下简称AR)提供了一个面向对象的接口,
 | 
					[Active Record](http://zh.wikipedia.org/wiki/Active_Record) (活动记录,以下简称AR)提供了一个面向对象的接口,
 | 
				
			||||||
用以访问数据库中的数据。一个 AR 类关联一张数据表,
 | 
					用以访问数据库中的数据。一个 AR 类关联一张数据表,
 | 
				
			||||||
每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。
 | 
					每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。
 | 
				
			||||||
一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。
 | 
					一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。
 | 
				
			||||||
您可以直接以面向对象的方式来操纵数据表中的数据,妈妈再不用担心我需要写原生 SQL 语句啦。
 | 
					您可以直接以面向对象的方式来操纵数据表中的数据,
 | 
				
			||||||
 | 
					妈妈再不用担心我需要写原生 SQL 语句啦。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
例如,假定 `Customer` AR 类关联着 `customer` 表,且该类的 `name` 属性代表 `customer` 表的 `name` 列。
 | 
					例如,假定 `Customer` AR 类关联着 `customer` 表,
 | 
				
			||||||
 | 
					且该类的 `name` 属性代表 `customer` 表的 `name` 列。
 | 
				
			||||||
你可以写以下代码来哉 `customer` 表里插入一行新的记录:
 | 
					你可以写以下代码来哉 `customer` 表里插入一行新的记录:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
用 AR 而不是原生的 SQL 语句去执行数据库查询,可以调用直观方法来实现相同目标。如,调用 [[yii\db\ActiveRecord::save()|save()]] 方法将执行插入或更新轮询,将在该 AR 类关联的数据表新建或更新一行数据:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
$customer = new Customer();
 | 
					$customer = new Customer();
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
$customer->name = '李狗蛋';
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
$customer->name = 'Qiang';
 | 
					$customer->name = 'Qiang';
 | 
				
			||||||
>>>>>>> yiichina/master
 | 
					 | 
				
			||||||
$customer->save();  // 一行新数据插入 customer 表
 | 
					$customer->save();  // 一行新数据插入 customer 表
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -29,11 +23,7 @@ $customer->save();  // 一行新数据插入 customer 表
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
$db->createCommand('INSERT INTO customer (name) VALUES (:name)', [
 | 
					$db->createCommand('INSERT INTO customer (name) VALUES (:name)', [
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
    ':name' => '李狗蛋',
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
    ':name' => 'Qiang',
 | 
					    ':name' => 'Qiang',
 | 
				
			||||||
>>>>>>> yiichina/master
 | 
					 | 
				
			||||||
])->execute();
 | 
					])->execute();
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,9 +34,13 @@ $db->createCommand('INSERT INTO customer (name) VALUES (:name)', [
 | 
				
			|||||||
* SQLite 2 和 3:通过 [[yii\db\ActiveRecord]]
 | 
					* SQLite 2 和 3:通过 [[yii\db\ActiveRecord]]
 | 
				
			||||||
* Microsoft SQL Server 2010 及以上:通过 [[yii\db\ActiveRecord]]
 | 
					* Microsoft SQL Server 2010 及以上:通过 [[yii\db\ActiveRecord]]
 | 
				
			||||||
* Oracle: 通过 [[yii\db\ActiveRecord]]
 | 
					* Oracle: 通过 [[yii\db\ActiveRecord]]
 | 
				
			||||||
* CUBRID 9.1 及以上:通过 [[yii\db\ActiveRecord]]
 | 
					* CUBRID 9.1 及以上:通过 [[yii\db\ActiveRecord]] (Note that due to a [bug](http://jira.cubrid.org/browse/APIS-658) in
 | 
				
			||||||
 | 
					  the cubrid PDO extension, quoting of values will not work, so you need CUBRID 9.3 as the client as well as the server)
 | 
				
			||||||
* Sphinx:通过 [[yii\sphinx\ActiveRecord]],需求 `yii2-sphinx` 扩展
 | 
					* Sphinx:通过 [[yii\sphinx\ActiveRecord]],需求 `yii2-sphinx` 扩展
 | 
				
			||||||
* ElasticSearch:通过 [[yii\elasticsearch\ActiveRecord]],需求 `yii2-elasticsearch` 扩展
 | 
					* ElasticSearch:通过 [[yii\elasticsearch\ActiveRecord]],需求 `yii2-elasticsearch` 扩展
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Additionally, Yii also supports using Active Record with the following NoSQL databases:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Redis 2.6.12 及以上:通过 [[yii\redis\ActiveRecord]],需求 `yii2-redis` 扩展
 | 
					* Redis 2.6.12 及以上:通过 [[yii\redis\ActiveRecord]],需求 `yii2-redis` 扩展
 | 
				
			||||||
* MongoDB 1.3.0 及以上:通过 [[yii\mongodb\ActiveRecord]],需求 `yii2-mongodb` 扩展
 | 
					* MongoDB 1.3.0 及以上:通过 [[yii\mongodb\ActiveRecord]],需求 `yii2-mongodb` 扩展
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -95,11 +89,7 @@ $email = $customer->email;
 | 
				
			|||||||
要改变列值,只要给关联属性赋新值并保存对象即可:
 | 
					要改变列值,只要给关联属性赋新值并保存对象即可:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
$customer->email = '哪吒@example.com';
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
$customer->email = 'james@example.com';
 | 
					$customer->email = 'james@example.com';
 | 
				
			||||||
>>>>>>> yiichina/master
 | 
					 | 
				
			||||||
$customer->save();
 | 
					$customer->save();
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -441,11 +431,7 @@ class Customer extends \yii\db\ActiveRecord
 | 
				
			|||||||
`hasMany()` 返回 [[yii\db\ActiveQuery]] 对象,该对象允许你通过
 | 
					`hasMany()` 返回 [[yii\db\ActiveQuery]] 对象,该对象允许你通过
 | 
				
			||||||
[[yii\db\ActiveQuery]] 方法定制查询。
 | 
					[[yii\db\ActiveQuery]] 方法定制查询。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
如上声明后,执行`$customer->bigOrders` 就返回
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
如上声明后,执行 `$customer->bigOrders` 就返回
 | 
					如上声明后,执行 `$customer->bigOrders` 就返回
 | 
				
			||||||
>>>>>>> yiichina/master
 | 
					 | 
				
			||||||
总额大于100的订单。使用以下代码更改设定值:
 | 
					总额大于100的订单。使用以下代码更改设定值:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
@ -1013,24 +999,11 @@ TODO
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
被污染属性
 | 
					被污染属性
 | 
				
			||||||
-------------------
 | 
					-------------------
 | 
				
			||||||
<<<<<<< .merge_file_a04472
 | 
					 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
当你调用[[yii\db\ActiveRecord::save()|save()]]用于保存活动记录(Active Record)实例时,只有被污染的属性才会被保存。一个属性是否认定为被污染取决于它的值自从最后一次从数据库加载或者最近一次保存到数据库后到现在是否被修改过。注意:无论活动记录(Active Record)是否有被污染属性,数据验证始终会执行。
 | 
					当你调用[[yii\db\ActiveRecord::save()|save()]]用于保存活动记录(Active Record)实例时,只有被污染的属性才会被保存。一个属性是否认定为被污染取决于它的值自从最后一次从数据库加载或者最近一次保存到数据库后到现在是否被修改过。注意:无论活动记录(Active Record)是否有被污染属性,数据验证始终会执行。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
活动记录(Active Record)会自动维护一个污染数据列表。它的工作方式是通过维护一个较旧属性值版本,并且将它们与最新的进行比较。你可以通过调用[[yii\db\ActiveRecord::getDirtyAttributes()]]来获取当前的污染属性。你也可以调用[[yii\db\ActiveRecord::markAttributeDirty()]]来显示的标记一个属性为污染属性。
 | 
					活动记录(Active Record)会自动维护一个污染数据列表。它的工作方式是通过维护一个较旧属性值版本,并且将它们与最新的进行比较。你可以通过调用[[yii\db\ActiveRecord::getDirtyAttributes()]]来获取当前的污染属性。你也可以调用[[yii\db\ActiveRecord::markAttributeDirty()]]来显示的标记一个属性为污染属性。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
如果你对最近一次修改前的属性值感兴趣,你可以调用[[yii\db\ActiveRecord::getOldAttributes()|getOldAttributes()]] 或 [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]]。
 | 
					如果你对最近一次修改前的属性值感兴趣,你可以调用[[yii\db\ActiveRecord::getOldAttributes()|getOldAttributes()]] 或 [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]]。
 | 
				
			||||||
>>>>>>> yiichina/master
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
当你调用[[yii\db\ActiveRecord::save()|save()]]用于保存活动记录(Active Record)实例时,只有被污染的属性才会被保存。一个属性是否认定为被污染取决于它的值自从最后一次从数据库加载或者最近一次保存到数据库后到现在是否被修改过。注意:无论活动记录(Active Record)是否有被污染属性,数据验证始终会执行。
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
活动记录(Active Record)会自动维护一个污染数据列表。它的工作方式是通过维护一个较旧属性值版本,并且将它们与最新的进行比较。你可以通过调用[[yii\db\ActiveRecord::getDirtyAttributes()]]来获取当前的污染属性。你也可以调用[[yii\db\ActiveRecord::markAttributeDirty()]]来显示的标记一个属性为污染属性。
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
如果你对最近一次修改前的属性值感兴趣,你可以调用[[yii\db\ActiveRecord::getOldAttributes()|getOldAttributes()]] 或 [[yii\db\ActiveRecord::getOldAttribute()|getOldAttribute()]]。
 | 
					 | 
				
			||||||
>>>>>>> .merge_file_a07132
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
另见
 | 
					另见
 | 
				
			||||||
-------------------
 | 
					-------------------
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user