为什么CakePHP无法为一个控制器创建固定装置,而为另一个控制器返回SQLSTATE [42000]?

问题描述

快速切出CakePHP应用程序(重要部分)

我有一个用户表,其中包含所有需要的内容(模型,控制器,视图,装置,测试案例)。 除其他数据外,该用户表还引用了城市表,国家和街道表。 对于城市,国家和街道,一切也都可以正常工作:(模型,控制器,视图,装置,测试用例)。

Fixtrue和Text Cases是使用Bake构建的。

虽然我可以为城市,国家和街道运行TestCases,但由于出现此错误消息,我无法为用户运行TestCases:

Exception: Unable to create constraints for fixture "App\Test\Fixture\UsersFixture" in "App\Test\TestCase\Controller\UsersControllerTest" test case: 
sqlSTATE[42000]: Syntax error or access violation: 1142 REFERENCES command denied to user 'cake_user'@'localhost' for table 'cities'
In [/opt/git/premesec/vendor/cakePHP/cakePHP/src/TestSuite/Fixture/FixtureManager.PHP,line 335]

让我感到困惑的是,我可以在运行城市TestCases时为城市运行固定装置,但是当为用户TestCases运行相同的装置时存在一个问题。

以下是UsersFixtures.PHP的约束条件:

'_constraints' => [
            'primary' => ['type' => 'primary','columns' => ['id'],'length' => []],'city_id' => ['type' => 'foreign','columns' => ['city_id'],'references' => ['cities','id'],'update' => 'noAction','delete' => 'noAction','fk_country_id' => ['type' => 'foreign','columns' => ['country_id'],'references' => ['countries','house_number_id' => ['type' => 'foreign','columns' => ['house_number_id'],'references' => ['house_numbers','street_id' => ['type' => 'foreign','columns' => ['street_id'],'references' => ['streets',],

以下是CitiesFixtures.PHP的约束条件:

'_constraints' => [
            'primary' => ['type' => 'primary',

CakePHP v4.0.6

PHP版本:7.2.24

适用于Linux(x86_64)的MysqL Ver 14.14 distrib 5.7.31

解决方法

请仔细检查错误消息,它实际上与cities表无关,而是与不允许您的帐户运行的REFERENCES命令有关,也就是说,这是{中的外键约束{1}}固定装置,很可能不会参与您的其他测试,即您的其他测试没有加载Users固定装置。

长话短说,您要么需要授予Users帐户相应的cake_user特权(这是创建外键约束的必要条件),要么选择已经具有所需的特权。

另请参见