首页 > 解决方案 > 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

我不明白为什么它不起作用,欢迎任何帮助:)

标签: phpsymfonydoctrine-ormgitlabdoctrine

解决方案


看来问题是您的注释OnetoMany因大小写而无效,正确的拼写应该是OneToMany.

尝试将其替换为:

/**
 * @ORM\OneToMany(targetEntity=AccessLogRegion::class, mappedBy="client")
 */
private $logsRegions;

推荐阅读