php - Gitlab CI 上的“错误 [语义错误] 属性中的注释“@Doctrine\ORM\Mapping\OnetoMany””,但在本地环境或生产中没有
问题描述
我已经在 symfony 4.4 应用程序上编写了一些测试,我想在我的 gitlab CI 上运行这些测试,但我收到了这个错误:
错误 [语义错误] App\Entity\Client::$logsRegions 属性中的注释“@Doctrine\ORM\Mapping\OnetoMany”从未导入。您是否可能忘记为此注释添加“使用”语句?
但我在本地环境和生产环境中都没有这个错误,我Doctrine\ORM\Mapping as ORM
在我的实体中导入
这是我的客户实体
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use App\Entity\Region\AccessLogRegion;
use App\Entity\Traits\ClientTrait;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Client
*
* @ORM\Table(name="client")
* @ORM\Entity(repositoryClass="App\Repository\ClientRepository")
* @ORM\HasLifecycleCallbacks
*/
class Client
{
use ClientTrait;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
//...
/**
* @ORM\OnetoMany(targetEntity=AccessLogRegion::class, mappedBy="client")
*/
private $logsRegions;
public function __construct()
{
$this->logsRegions = new ArrayCollection();
}
public function getLogsRegions()
{
return $this->logsRegions;
}
}
我的 .gitlab-ci.yml
image: jakzal/phpqa:php7.4
before_script:
- composer install
cache:
paths:
- vendor/
stages:
- UnitTests
phpunit:
image: php:7.4-apache
stage: UnitTests
services:
- name: mysql:5.7
alias: mysql
variables:
MYSQL_ROOT_PASSWORD: project
MYSQL_DATABASE: project_test
MYSQL_USER: root
MYSQL_PASSWORD: project
DATABASE_URL: 'mysql://root:project@mysql:3306/project_test'
before_script:
- apt-get update && apt-get install -y git libzip-dev
- curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer
- docker-php-ext-install mysqli pdo pdo_mysql zip
- php bin/console doctrine:database:drop --force --env=test
- php bin/console doctrine:database:create --env=test
- php bin/console doctrine:schema:update --env=test --force
script:
- php bin/phpunit
allow_failure: false
完整的 gitlab 错误日志:
$ php bin/console dictionary:database:drop --force --env=test 删除数据库 /tmp/test/test_db.sqlite 用于连接命名为默认
$ php bin/console dictionary:database:create --env=test 创建数据库 /tmp/test/test_db.sqlite 用于命名为默认的连接 $ php bin/console dictionary:schema:update --env=test --force
在 AnnotationException.php 第 39 行:[语义错误] App\Entity\Client::$logsRegions 属性中的注释“@Doctrine\ORM\Mapping\OnetoMany”从未导入。您是否可能忘记为此注释添加“使用”语句?
学说:模式:更新 [--em EM] [--complete] [--dump-sql] [-f|--force] [-h|--help] [-q|--quiet] [-v |vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [- -无调试] [--]
清理基于文件的变量
错误:作业失败:退出代码 1
我不明白为什么它不起作用,欢迎任何帮助:)
解决方案
看来问题是您的注释OnetoMany
因大小写而无效,正确的拼写应该是OneToMany
.
尝试将其替换为:
/**
* @ORM\OneToMany(targetEntity=AccessLogRegion::class, mappedBy="client")
*/
private $logsRegions;