mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-16 06:17:56 +08:00
use andWhere() in AR::find() to work properly with default scope
fixes #1469
This commit is contained in:
@@ -67,7 +67,7 @@ class ActiveRecord extends BaseActiveRecord
|
|||||||
{
|
{
|
||||||
$query = static::createQuery();
|
$query = static::createQuery();
|
||||||
if (is_array($q)) {
|
if (is_array($q)) {
|
||||||
if (count($q) == 1 && (array_key_exists(ActiveRecord::PRIMARY_KEY_NAME, $q))) {
|
if (count($q) == 1 && (array_key_exists(ActiveRecord::PRIMARY_KEY_NAME, $q)) && $query->where === null) {
|
||||||
$pk = $q[ActiveRecord::PRIMARY_KEY_NAME];
|
$pk = $q[ActiveRecord::PRIMARY_KEY_NAME];
|
||||||
if (is_array($pk)) {
|
if (is_array($pk)) {
|
||||||
return static::mget($pk);
|
return static::mget($pk);
|
||||||
@@ -75,7 +75,7 @@ class ActiveRecord extends BaseActiveRecord
|
|||||||
return static::get($pk);
|
return static::get($pk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $query->where($q)->one();
|
return $query->andWhere($q)->one();
|
||||||
} elseif ($q !== null) {
|
} elseif ($q !== null) {
|
||||||
return static::get($q);
|
return static::get($q);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ Yii Framework 2 Change Log
|
|||||||
- Enh #1293: Replaced Console::showProgress() with a better approach. See Console::startProgress() for details (cebe)
|
- Enh #1293: Replaced Console::showProgress() with a better approach. See Console::startProgress() for details (cebe)
|
||||||
- Enh #1406: DB Schema support for Oracle Database (p0larbeer, qiangxue)
|
- Enh #1406: DB Schema support for Oracle Database (p0larbeer, qiangxue)
|
||||||
- Enh #1437: Added ListView::viewParams (qiangxue)
|
- Enh #1437: Added ListView::viewParams (qiangxue)
|
||||||
|
- Enh #1469: ActiveRecord::find() now works with default conditions (default scope) applied by createQuery (cebe)
|
||||||
- New extension #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
|
- New extension #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul)
|
||||||
|
|
||||||
2.0.0 alpha, December 1, 2013
|
2.0.0 alpha, December 1, 2013
|
||||||
|
|||||||
@@ -150,9 +150,23 @@ class ActiveRecord extends BaseActiveRecord
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an [[ActiveQuery]] instance.
|
* Creates an [[ActiveQuery]] instance.
|
||||||
|
*
|
||||||
* This method is called by [[find()]], [[findBySql()]] to start a SELECT query.
|
* This method is called by [[find()]], [[findBySql()]] to start a SELECT query.
|
||||||
* You may override this method to return a customized query (e.g. `CustomerQuery` specified
|
* You may override this method to return a customized query (e.g. `CustomerQuery` specified
|
||||||
* written for querying `Customer` purpose.)
|
* written for querying `Customer` purpose.)
|
||||||
|
*
|
||||||
|
* You may also define default conditions that should apply to all queries unless overridden:
|
||||||
|
*
|
||||||
|
* ```php
|
||||||
|
* public static function createQuery()
|
||||||
|
* {
|
||||||
|
* return parent::createQuery()->where(['deleted' => false]);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Note that all queries should use [[Query::andWhere()]] and [[Query::orWhere()]] to keep the
|
||||||
|
* default condition. Using [[Query::where()]] will override the default condition.
|
||||||
|
*
|
||||||
* @return ActiveQuery the newly created [[ActiveQuery]] instance.
|
* @return ActiveQuery the newly created [[ActiveQuery]] instance.
|
||||||
*/
|
*/
|
||||||
public static function createQuery()
|
public static function createQuery()
|
||||||
|
|||||||
@@ -94,9 +94,23 @@ interface ActiveRecordInterface
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an [[ActiveQueryInterface|ActiveQuery]] instance.
|
* Creates an [[ActiveQueryInterface|ActiveQuery]] instance.
|
||||||
|
*
|
||||||
* This method is called by [[find()]] to start a SELECT query.
|
* This method is called by [[find()]] to start a SELECT query.
|
||||||
* You may override this method to return a customized query (e.g. `CustomerQuery` specified
|
* You may override this method to return a customized query (e.g. `CustomerQuery` specified
|
||||||
* written for querying `Customer` purpose.)
|
* written for querying `Customer` purpose.)
|
||||||
|
*
|
||||||
|
* You may also define default conditions that should apply to all queries unless overridden:
|
||||||
|
*
|
||||||
|
* ```php
|
||||||
|
* public static function createQuery()
|
||||||
|
* {
|
||||||
|
* return parent::createQuery()->where(['deleted' => false]);
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Note that all queries should use [[Query::andWhere()]] and [[Query::orWhere()]] to keep the
|
||||||
|
* default condition. Using [[Query::where()]] will override the default condition.
|
||||||
|
*
|
||||||
* @return ActiveQueryInterface the newly created [[ActiveQueryInterface|ActiveQuery]] instance.
|
* @return ActiveQueryInterface the newly created [[ActiveQueryInterface|ActiveQuery]] instance.
|
||||||
*/
|
*/
|
||||||
public static function createQuery();
|
public static function createQuery();
|
||||||
|
|||||||
@@ -114,12 +114,12 @@ abstract class BaseActiveRecord extends Model implements ActiveRecordInterface
|
|||||||
{
|
{
|
||||||
$query = static::createQuery();
|
$query = static::createQuery();
|
||||||
if (is_array($q)) {
|
if (is_array($q)) {
|
||||||
return $query->where($q)->one();
|
return $query->andWhere($q)->one();
|
||||||
} elseif ($q !== null) {
|
} elseif ($q !== null) {
|
||||||
// query by primary key
|
// query by primary key
|
||||||
$primaryKey = static::primaryKey();
|
$primaryKey = static::primaryKey();
|
||||||
if (isset($primaryKey[0])) {
|
if (isset($primaryKey[0])) {
|
||||||
return $query->where([$primaryKey[0] => $q])->one();
|
return $query->andWhere([$primaryKey[0] => $q])->one();
|
||||||
} else {
|
} else {
|
||||||
throw new InvalidConfigException(get_called_class() . ' must have a primary key.');
|
throw new InvalidConfigException(get_called_class() . ' must have a primary key.');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user