Symfony 4使:实体--regenerate失败:在" App"中找不到实体。命名空间

时间:2018-05-30 12:58:49

标签: php symfony doctrine symfony4

来自composer.json

{
    "name": "symfony/website-skeleton",
    "type": "project",
    "license": "MIT",
    "description": "A skeleton to start a new Symfony website",
    "require": {
        "php": "^7.1.3",
        "ext-iconv": "*",
        "sensio/framework-extra-bundle": "^5.1",
        "symfony/apache-pack": "^1.0",
        "symfony/asset": "^4.0",
        "symfony/console": "^4.0",
        "symfony/expression-language": "^4.0",
        "symfony/flex": "^1.0",
        "symfony/form": "^4.0",
        "symfony/framework-bundle": "^4.0",
        "symfony/lts": "^4@dev",
        "symfony/monolog-bundle": "^3.1",
        "symfony/orm-pack": "^1.0",
        "symfony/process": "^4.0",
        "symfony/security-bundle": "^4.0",
        "symfony/serializer-pack": "*",
        "symfony/swiftmailer-bundle": "^3.1",
        "symfony/translation": "^4.0",
        "symfony/twig-bundle": "^4.0",
        "symfony/validator": "^4.0",
        "symfony/web-link": "^4.0",
        "symfony/webpack-encore-pack": "*",
        "symfony/yaml": "^4.0"
    },
    "require-dev": {
        "symfony/browser-kit": "^4.0",
        "symfony/css-selector": "^4.0",
        "symfony/debug-pack": "*",
        "symfony/dotenv": "^4.0",
        "symfony/maker-bundle": "^1.5",
        "symfony/phpunit-bridge": "^4.0",
        "symfony/profiler-pack": "*",
        "symfony/web-server-bundle": "^4.0"
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false
        }
    }
}
来自doctrine.yaml:

# /config/packages/doctrine.yaml
doctrine:
    dbal:
        default_connection: training
        connections:
            training:
                dbname:   "training"
                driver:   "pdo_mysql"
                host:     "localhost"
                port:     "3306"
                user:     "userdb"
                password: "XXXXXXXXXX"
                charset:  UTF8
                mapping_types:
                    bit: boolean
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        default_entity_manager: training
        entity_managers:
            training:
                connection: training
                auto_mapping: true

命令:

php bin/console doctrine:mapping:import --em=training App\Entity annotation --path=src/Entity

生成src/Entity Course.php实体:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Course
 *
 * @ORM\Table(name="course", indexes={@ORM\Index(name="id_product_idx_1", columns={"id_product"}), @ORM\Index(name="enabled_idx_1", columns={"enabled"}), @ORM\Index(name="sort_idx_1", columns={"sort"})})
 * @ORM\Entity
 */
class Course
{
    ....

进入控制台后:

php bin/console make:entity --regenerate App

这失败并出现错误:

  

在&#34; App&#34;中没有找到任何实体。命名空间

同样适用于

php bin/console make:entity --regenerate App\Entity 

如果我尝试

php bin/console make:entity --regenerate App\Entity\Course

输出

  

无法找到&#34; App \ Entity \ Course&#34;的Doctrine元数据。它是否被映射为实体?

我做错了什么?

5 个答案:

答案 0 :(得分:1)

查看def writePostsToSql(): con = sqlite3.connect("database.db") cur = con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS posts (Id, PostTypeId, AcceptedAnswerId, Date, Time, Score, ViewCount, Body, OwnerUserId, Title, Tags, AnswerCount, FavoriteCount, PRIMARY KEY (Id), FOREIGN KEY (AcceptedAnswerId), FOREIGN KEY (OwnerUserId));") # use your column names here with open('Posts.csv', 'r') as fin: dr = csv.DictReader(fin) # comma is default delimiter to_db = [(i['Id'], i['PostTypeId'], i['AcceptedAnswerId'], i['Date'], i['Time'], i['Score'], i['ViewCount'], i['Body'], i['OwnerUserId'], i['Title'], i['Tags'], i['AnswerCount'], i['FavoriteCount']) for i in dr] cur.executemany("INSERT INTO posts (Id, PostTypeId, AcceptedAnswerId, Date, Time, Score, ViewCount, Body, OwnerUserId, Title, Tags, AnswerCount, FavoriteCount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", to_db) con.commit() con.close()

config/packages/doctrine.yaml

这就是问题所在。每个.orm.yml都在那条路上搜索。

答案 1 :(得分:1)

app/config/packages/doctrine.yaml

...
doctrine:

...

 orm:
        default_entity_manager: default
        auto_generate_proxy_classes: '%kernel.debug%'
        entity_managers:
            default:
                naming_strategy: doctrine.orm.naming_strategy.underscore
                connection: default


                #ADD THESE LINES AND CHANGE PATH IF NEEDED
                mappings:
                    App:
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/'
                        prefix: 'App\Entity\'

运行php bin/console make:entity --regenerate

enter image description here

答案 2 :(得分:0)

我有相同的错误,发现的解决方法是将repositoryClass添加到所有实体:

@ORM\Entity(repositoryClass="App\Repository\DefaultRepository")

最终代码如下:

/**
 * Key
 *
 * @ORM\Table(name="`key`")
 * @ORM\Entity(repositoryClass="App\Repository\DefaultRepository")
 */

希望对您有帮助

答案 3 :(得分:0)

在您的实体类中,确保命名空间的格式如下:namespace App\Entity

答案 4 :(得分:0)

在我的情况下,是因为我写了:

php bin/console make:entity --regenerate App\Entity\Course

代替(注意双反斜杠)

php bin/console make:entity --regenerate App\\Entity\\Course