Я следую за книгой и на странице 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
Спасибо
С
doctrine:generate:entity
вы создадите новый объект.
И когда вы добавляете некоторые атрибуты вручную
doctrine:generate:entities AcmeDemoBundle:User
вы создадите все accessor (getter и setter) объекта User of AcmeDemoBundle
Эта ошибка также возникнет, если ваши проекты (только?) Entity ошибочно именуются. Если вы запустите команду
$ 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». Файл был найден, но класс не был в нем, имя класса или пространство имен, вероятно, имеет опечатку.
Если это так, то тогда ошибка говорит сама за себя (надеюсь) и имя пространства имен / классов должно быть исправлено. Надеюсь, это полезно кому-то.
Решение:
Обновление файлов symfony:
composer update
затем создавать объекты
php bin/console doctrine:generate:entities BackendBundle
В книге 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
или
Вручную добавьте информацию об объекте Product в «Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml"
или
Удалить «Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml» и описать объект категории с аннотациями в Category.php
Убедитесь, что открытия PHP и (необязательные) закрывающие теги
<?php
а также
?>
верны в вашем файле.
Они не включаются при копировании пасты из учебника по адресу http://symfony.com/doc/current/book/doctrine.html.
Я застрял в той же проблеме. Посмотрев на этот пост, я начал задаваться вопросом, почему подсветка синтаксиса была нарушена, и обнаружил, что теги открытия и закрытия отсутствуют. Ошибка исчезла, когда теги были включены.
Проблема может быть одной из двух вещей,
убедитесь, что у вас есть оператор использования вверху, то есть
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
инструкции над классом.
У меня лично была ошибка, потому что я отсутствовал в папке / каталоге «Сущность».