Symfony 2: Пространство имен "Acme" не содержит сопоставленных объектов

Я следую за книгой и на странице http://symfony.com/doc/current/book/doctrine.html

Во время работы над книгой я пытаюсь работать над отношением таблицы продуктов и категорий, а команда генерации доктрины дает мне следующую ошибку.

php app/console doctrine:generate:entities Acme
Generating entities for namespace "Acme"



  [RuntimeException]                                      
  Namespace "Acme" does not contain any mapped entities.  



doctrine:generate:entities [--path="..."] [--no-backup] name

спасибо

Ответы

Ответ 1

С

doctrine:generate:entity

вы создадите новый объект.

И когда вы добавляете некоторые атрибуты вручную с помощью

doctrine:generate:entities AcmeDemoBundle:User

вы создадите все accessor (getter и setter) объекта User of AcmeDemoBundle

Ответ 2

Эта ошибка также возникнет, если ваши проекты (только?) Объект неправильно помещен в имена. Если вы запустите команду

$ php app/console doctrine:generate:entities MyBundle

и вызывает ошибку

[RuntimeException]
Пакет "MyBundle" не содержит сопоставленных объектов.

Проверьте более конкретную команду....

$ php app/console doctrine:generate:entities MyBundle:MyEntity

И посмотрите, получится ли ошибка:

[RuntimeException]
Ожидаемый класс автозагрузчика "MyBundle\Entity\MyEntity" для определения в файле "/path/to/MyBundle/Entity/MyEntity.php". Файл был найден, но класс не был в нем, имя класса или пространство имен, вероятно, имеет опечатку.

Если это так, то тогда ошибка говорит сама за себя (надеюсь) и имя пространства имен/классов должно быть исправлено. Надеюсь, это кому-то поможет.

Ответ 3

Решение:

Обновить файлы symfony:

composer update

затем создайте сущности

php bin/console doctrine:generate:entities BackendBundle

Ответ 4

В книге http://symfony.com/doc/current/book/doctrine.html объект Porduct был создан вручную. Вы написали код в Product.php. Вся информация о полях сущностей содержит в аннотациях.
Но категория сущностей была создана с помощью

php app/console doctrine:generate:entity --entity="AcmeStoreBundle:Category" --fields="name:string(255)"

Автоматически сгенерированный объект Caterory.php не содержит аннотации. Symfony хранит информацию в "Acme\StoreBundle\Resources\config\doctrine\Category.orm.yml" . Вот почему php app/console doctrine:mapping:info говорит, что у вас есть только 1 сопоставленная сущность - Категория.

Решение
Вы можете создать объект Product с doctrine:generate:entity
или
Вручную добавьте информацию об объекте продукта в "Acme\StoreBundle\Resources\config\doctrine\Category.orm.yml"
или
Удалить "Acme\StoreBundle\Resources\config\doctrine\Category.orm.yml" и описать объект категории с аннотациями в Category.php

Ответ 5

Убедитесь, что открывающие PHP и (необязательные) закрывающие теги

<?php  

и

?>

верны в вашем файле.

Они не включаются при копировании пасты из учебника по адресу http://symfony.com/doc/current/book/doctrine.html

Я застрял в той же проблеме. Посмотрев на этот пост, я начал задаваться вопросом, почему подсветка синтаксиса была нарушена, и обнаружил, что теги открытия и закрытия отсутствуют. Ошибка исчезла, когда теги были включены.

Ответ 6

Одной из двух проблем может быть проблема,

  • убедитесь, что у вас есть оператор использования вверху, то есть

    use Acme\StoreBundle\Entity\Product;

    Он не включен в пример, они отображаются только use Doctrine\Common\Collections\ArrayCollection;

  • При указании целевого объекта всегда указывается полное пространство имен, если сущности находятся в разных пространствах имен.  Пример:

    @ORM\OneToMany(targetEntity="Acme\StoreBundle\Entity\Product", mappedBy="category")

    вместо:

    @ORM\OneToMany(targetEntity="Product", mappedBy="category")

    Второй работает только в том случае, если два объекта находятся в одном пространстве имен и этот объект был вызван оператором use над классом.

Ответ 7

У меня лично была ошибка, потому что мне не хватало папку/каталог "Entity".