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".