Commit cdb1221a by Carsten Brandt

fixed docs about AR scopes

parent 5ee50a84
......@@ -703,9 +703,9 @@ Important points are:
1. Class should extend from `yii\db\ActiveQuery` (or another `ActiveQuery` such as `yii\mongodb\ActiveQuery`).
2. A method should be `public` and should return `$this` in order to allow method chaining. It may accept parameters.
3. Check `ActiveQuery` methods that are very useful for modifying query conditions.
3. Check [[yii\db\ActiveQuery]] methods that are very useful for modifying query conditions.
Second, override `ActiveRecord::createQuery()` to use the custom query class instead of the regular `ActiveQuery`.
Second, override [[yii\db\ActiveRecord::createQuery()]] to use the custom query class instead of the regular [[yii\db\ActiveQuery|ActiveQuery]].
For the example above, you need to write the following code:
```
......@@ -715,9 +715,10 @@ use yii\db\ActiveRecord;
class Comment extends ActiveRecord
{
public static function createQuery()
public static function createQuery($config = [])
{
return new CommentQuery(['modelClass' => get_called_class()]);
$config['modelClass'] = get_called_class();
return new CommentQuery($config);
}
}
```
......@@ -734,7 +735,7 @@ You can also use scopes when defining relations. For example,
```php
class Post extends \yii\db\ActiveRecord
{
public function getComments()
public function getActiveComments()
{
return $this->hasMany(Comment::className(), ['post_id' => 'id'])->active();
......@@ -752,20 +753,6 @@ $posts = Post::find()->with([
])->all();
```
### Default Scope
If you used Yii 1.1 before, you may know a concept called *default scope*. A default scope is a scope that
applies to ALL queries. You can define a default scope easily by overriding `ActiveRecord::createQuery()`. For example,
```php
public static function createQuery()
{
$query = new CommentQuery(['modelClass' => get_called_class()]);
$query->where(['deleted' => false]);
return $query;
}
```
### Making it IDE-friendly
......@@ -794,10 +781,27 @@ class CommentQuery extends ActiveQuery
}
```
### Default Scope
If you used Yii 1.1 before, you may know a concept called *default scope*. A default scope is a scope that
applies to ALL queries. You can define a default scope easily by overriding [[yii\db\ActiveRecord::createQuery()]]. For example,
```php
public static function createQuery($config = [])
{
$config['modelClass'] = get_called_class();
return (new ActiveQuery($config))->where(['deleted' => false]);
}
```
Note that all your queries should then not use [[yii\db\ActiveQuery::where()|where()]] but
[[yii\db\ActiveQuery::andWhere()|andWhere()]] and [[yii\db\ActiveQuery::orWhere()|orWhere()]]
to not override the default condition.
Transactional operations
------------------------
When a few DB operations are related and are executed
TODO: FIXME: WIP, TBD, https://github.com/yiisoft/yii2/issues/226
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment