Add generic types for ActiveRecord and Container (#20325)

Co-authored-by: Alexander Makarov <sam@rmcreative.ru>
This commit is contained in:
Dmitriy Derepko
2025-02-21 19:00:43 +03:00
committed by GitHub
parent 1c191eac90
commit 06bd683d21
4 changed files with 43 additions and 3 deletions

View File

@ -69,6 +69,8 @@ use yii\base\InvalidConfigException;
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @author Carsten Brandt <mail@cebe.cc> * @author Carsten Brandt <mail@cebe.cc>
* @since 2.0 * @since 2.0
*
* @template T of (ActiveRecord|array)
*/ */
class ActiveQuery extends Query implements ActiveQueryInterface class ActiveQuery extends Query implements ActiveQueryInterface
{ {
@ -127,6 +129,8 @@ class ActiveQuery extends Query implements ActiveQueryInterface
* @param Connection|null $db the DB connection used to create the DB command. * @param Connection|null $db the DB connection used to create the DB command.
* If null, the DB connection returned by [[modelClass]] will be used. * If null, the DB connection returned by [[modelClass]] will be used.
* @return array|ActiveRecord[] the query results. If the query results in nothing, an empty array will be returned. * @return array|ActiveRecord[] the query results. If the query results in nothing, an empty array will be returned.
* @psalm-return T[]
* @phpstan-return T[]
*/ */
public function all($db = null) public function all($db = null)
{ {
@ -295,9 +299,11 @@ class ActiveQuery extends Query implements ActiveQueryInterface
* Executes query and returns a single row of result. * Executes query and returns a single row of result.
* @param Connection|null $db the DB connection used to create the DB command. * @param Connection|null $db the DB connection used to create the DB command.
* If `null`, the DB connection returned by [[modelClass]] will be used. * If `null`, the DB connection returned by [[modelClass]] will be used.
* @return ActiveRecord|array|null a single row of query result. Depending on the setting of [[asArray]], * @return array|ActiveRecord|null a single row of query result. Depending on the setting of [[asArray]],
* the query result may be either an array or an ActiveRecord object. `null` will be returned * the query result may be either an array or an ActiveRecord object. `null` will be returned
* if the query results in nothing. * if the query results in nothing.
* @psalm-return T|null
* @phpstan-return T|null
*/ */
public function one($db = null) public function one($db = null)
{ {
@ -310,6 +316,32 @@ class ActiveQuery extends Query implements ActiveQueryInterface
return null; return null;
} }
/**
* {@inheritdoc}
*
* @return BatchQueryResult
* @psalm-return T[][]|BatchQueryResult
* @phpstan-return T[][]|BatchQueryResult
* @codeCoverageIgnore
*/
public function batch($batchSize = 100, $db = null)
{
return parent::batch($batchSize, $db);
}
/**
* {@inheritdoc}
*
* @return BatchQueryResult
* @psalm-return T[]|BatchQueryResult
* @phpstan-return T[]|BatchQueryResult
* @codeCoverageIgnore
*/
public function each($batchSize = 100, $db = null)
{
return parent::each($batchSize, $db);
}
/** /**
* Creates a DB command that can be used to execute this query. * Creates a DB command that can be used to execute this query.
* @param Connection|null $db the DB connection used to create the DB command. * @param Connection|null $db the DB connection used to create the DB command.

View File

@ -157,6 +157,13 @@ class Container extends Component
* @return object an instance of the requested class. * @return object an instance of the requested class.
* @throws InvalidConfigException if the class cannot be recognized or correspond to an invalid definition * @throws InvalidConfigException if the class cannot be recognized or correspond to an invalid definition
* @throws NotInstantiableException If resolved to an abstract class or an interface (since 2.0.9) * @throws NotInstantiableException If resolved to an abstract class or an interface (since 2.0.9)
*
*
* @template T of class-string
* @psalm-param class-string<T>|array{class: class-string<T>} $class
* @phpstan-param class-string<T>|array{class: class-string<T>} $class
* @psalm-return T
* @phpstan-return T
*/ */
public function get($class, $params = [], $config = []) public function get($class, $params = [], $config = [])
{ {

View File

@ -11,6 +11,7 @@ use yii\db\ActiveQuery;
/** /**
* CustomerQuery. * CustomerQuery.
* @extends ActiveQuery<CustomerWithAlias>
*/ */
class CustomerQuery extends ActiveQuery class CustomerQuery extends ActiveQuery
{ {

View File

@ -21,12 +21,12 @@ class CustomerWithAlias extends ActiveRecord
public $status2; public $status2;
public $sumTotal; public $sumTotal;
public static function tableName() public static function tableName()
{ {
return 'customer'; return 'customer';
} }
/** /**
* {@inheritdoc} * {@inheritdoc}
* @return CustomerQuery * @return CustomerQuery