当前位置: 首页 > 知识库问答 >
问题:

如何加载Yii 2夹具?

江超英
2023-03-14

我使用一个简单的夹具来填充测试数据库中的表。但是当我尝试加载它时,检查完整性代码会抛出异常“表未找到:[]”。

我的固定装置:

<?php

namespace tests\unit\fixtures;

use yii\test\ActiveFixture;

class IdentityDocumentFixture extends ActiveFixture
{
    public $modelClass = 'backend\modules\persons\models\IdentityDocument';
}

要加载fixture,我使用@app/tests:yii fixture/load IdentityDocument的以下命令

C:\php-projects\ais\tests\codeception\bin>yii fixture/load IdentityDocument
Fixtures namespace is:
        tests\unit\fixtures

Global fixtures will be used:

        1. yii\test\InitDb

Fixtures below will be loaded:

        1. IdentityDocument

Load above fixtures? (yes|no) [no]:yes

因此,我收到以下错误消息:

异常“yii\base\InvalidParamException”,在C:\php projects\ais\vendor\yiisoft\yii2\db\mssql\QueryBuilder中显示消息“未找到表:[]”。菲律宾比索:180

堆栈跟踪:

0 C:\php projects\ais\vendor\yiisoft\yii2\db\Command。php(753):yii\db\mssql\QueryBuilder-

如何装载夹具?测试数据库存在,数据源配置正确。

[更新]

表的真实名称是tbl_identitydocument

CREATE TABLE [dbo].[tbl_identitydocument](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](100) NOT NULL,
    [FISID] [int] NULL,
 CONSTRAINT [PK_tbl_identitydocument] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

以下是模型IdentityDocument的方法tableName()

public static function tableName()
{
    return '{{%identitydocument}}';
}

模型代码完全:

<?php

namespace backend\modules\persons\models;

use Yii;
use backend\modules\persons\Module;

/**
 * This is the model class for table "{{%identitydocument}}".
 *
 * @property integer $ID
 * @property string $Name
 * @property integer $FISID
 */
class IdentityDocument extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%identitydocument}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['Name'], 'required'],
            [['Name'], 'string'],
            [['FISID'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => Module::t('ML', 'ID'),
            'Name' => Module::t('ML', 'Name'),
            'FISID' => Module::t('ML', 'FISID'),
        ];
    }
}

在调试器下,我可以看到方法IdentityDocument::tableName()返回:

$tableNameTmp = IdentityDocument::tableName();

我看到$tableNameTmp等于{{{%identitydocument}(逐字,返回此字符串)

[更新]

在调试器下,我可以看到以下内容。在类TestCase中。php有一个方法setUp()

/**
 * @inheritdoc
 */
protected function setUp()
{
    parent::setUp();
    $this->mockApplication();
    $this->unloadFixtures();
    $this->loadFixtures();
}

在此处引发异常:$this-

在屏幕截图中可以看到initScript引用了路径@app/tests/fixtures/initdb。php但是没有这样的文件。。另外,schemas数组包含单个元素”。

[更新]

我在这里使用了@slinstj编写的指令-Runfixture/load User无法加载用户数据。在我的本地项目(高级模式和MySQL rdbms)中,夹具已成功加载:


共有1个答案

白修谨
2023-03-14
'components' => [
    'db' => [
        'class' => '\yii\db\Connection',
        'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'tablePrefix' => 'tbl_', // <<<<<<<<
    ],
],

来自文档的更多信息:

$tablePrefix

表名的通用前缀或后缀。如果表名为{{%TableName}},则百分比字符%将替换为此属性值。例如,{{%post}}变成了{{tbl_post}}。

据此:

// In your IdentityDocumentFixture, set this:
public $dataFile = __DIR__ . '/path/to/your/data-file.php';
 类似资料:
  • 我想加载(要求)一个包含json模式的文件夹,这些模式具有基于其文件的引用。 换句话说,我有 并在同一文件夹中的另一个文件中: 这些模式在sperate文件中,现在应该加载到JS中,以便针对json对象进行验证。但是,文件夹内的引用应该仍然有效。 这就是为什么我的问题是,是否以及如何能够加载一个装满json文件的文件夹,而不需要中断引用。 这个库将使用这些模式来验证json对象:https://g

  • 我决定上传几个图像文件使用文件输入小部件 控制员/行动 模型 这是印刷品 后果 结果是数组中只有最后一个文件。如果我不使用这个小部件,那么一切都是正常加载的数组。 如何加载和处理一组照片?

  • 问题内容: 我的项目具有以下结构: 我有一个文件,我想从单元测试中加载文件 我有此代码不起作用。它抱怨“没有这样的文件或目录”。 我也试过了 这也不起作用。它返回。我正在使用Maven构建我的项目。 问题答案: 尝试下一个: 如果上述方法不起作用,则已在以下类中添加了各种项目:1(代码在此处)。 以下是有关如何使用该类的一些示例:

  • 问题内容: 有人可以为我提供导入整个模块目录的好方法吗? 我有这样的结构: 我尝试通过添加和执行操作将其转换为程序包,但它没有按我希望的方式工作。 问题答案: 列出当前文件夹中的所有文件,并将它们作为变量放入

  • 我正在使用SpringBoot和thymeleaf从html模板生成文档。 随着模板的不断变化,我希望ti从外部加载模板,只是从外部添加或删除模板,而不是重新部署应用程序。 作为POC,使用/resources文件夹时效果良好。 这就是错误: 解析模板“凭证”时出错,该模板可能不存在,或者任何已配置的模板解析程序都无法访问该模板 这就是背景: applycation.yml 这是我的方法:其中te

  • 我有两个jar文件。第一个只包含接口 在请求的基础上,我试图从中加载我的实现类。jar文件存在于某个文件夹中,在运行时使用URLClassLoader。 课程正在加载 我确信这是由于我使用不同的类加载器来加载类,但是我如何克服类之间的兼容性问题。 同样的代码可以在正常的J2SE环境中工作,但不能在JBoss环境中工作。 如果我的查询不清楚,请让我知道我也可以粘贴源代码。