yii2需要给每张表建一个ar模型吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2需要给每张表建一个ar模型吗相关的知识,希望对你有一定的参考价值。

参考技术A 虽然不是必须的,但最好这样做,可以更迅速的去操作表数据。

如何在库项目中测试Yii2模型?

我正在尝试实现一个使用扩展yiidbActiveRecord的Yii模型对象的适配器。该对象作为构造函数arg传递给适配器类。

我现在的问题是,我仍然无法弄清楚如何让它正常工作。我甚至尝试过嘲笑但是因为Yii使用了很多静态方法来获取它的对象而被卡住了。当然,我现在可以试着嘲笑他们......但是必须有更好的方法吗?

public function testSuccessFullFind(): void
{
    $connection = (new Connection([
            'dsn' => 'sqlite:test'
        ]))
        ->open();

    $queryBuilder = new yiidbsqliteQueryBuilder($connection);

    $app = $this->createMock(Application::class);
    Yii::$app = $app;

    $app->expects($this->any())
        ->method('getDb')
        ->willReturn($this->returnValue($connection));

    $userModel = new UserModel();
    $resovler = new Yii2Resolver($userModel);
    $result = $resolver->find(['username' => 'test', 'password' => 'test']);
    // TBD asserts for the result
}

UserModel用于在内部查找用户记录。

这导致:

1) AuthenticationTestIdentifierResolverYii2ResolverTest::testSuccessFullFind
Error: Call to a member function getDb() on null

vendoryiisoftyii2-devframeworkdbActiveRecord.php:135
vendoryiisoftyii2-devframeworkdbActiveQuery.php:312
vendoryiisoftyii2-devframeworkdbQuery.php:237
vendoryiisoftyii2-devframeworkdbActiveQuery.php:133
testsTestCaseIdentifierResolverYii2ResolverTest.php:31

上面的代码显然是测试用例的WIP。

那么如何配置测试连接并让我的ActiveRecord对象使用它呢?

答案

您可以将连接作为all()方法的参数传递:

$results = UserModel::find()->where(['id' => 1])->all($connection);

以上是关于yii2需要给每张表建一个ar模型吗的主要内容,如果未能解决你的问题,请参考以下文章

为什么我们使用混合AR和MA模型的ARMA模型。 AR或MA不足够吗?

yii2项目实战-那些年错过的数据库查询

yii2从ActiveDataProvider中删除模型

YII2 模型概述

Yii2 - 在模型中提交时如何从小部件中获取数据?

如何在库项目中测试 Yii2 模型?