Проблемы в сущностях из разных пакетов с использованием разных менеджеров сущностей - PullRequest
0 голосов
/ 17 февраля 2012

Редактировать:

Я подготовил tar.gz, который после распаковки и после запуска ./bin/vendors install не может загрузить приборы через php scripts/createAll.php.В tar.gz есть 2 пакета, использующих 2 разных соединения, каждое со своей базой данных.

Я думаю, что Symfony2 не может правильно управлять ими.Если вы посмотрите на scripts / createAll.php, то увидите, как Symfony не может загрузить оба прибора, но если вы удалите случайный прибор (это не имеет значения, Var_.php или Foo_.php, все работает нормально, что мне кажется, чтоSymfony не может правильно управлять объектами.)

ССЫЛКА: http://www.2shared.com/file/2u4GhFVX/SymfonyTestCasetar.html

Я хочу сказать Symfony2, чтобы использовать разные entity managers для разных Bundle directories, поэтому мой config.yml выглядитнапример:

orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager:   default
    entity_managers:
        default:
            connection: default
            mappings:
                myVendorURLCoreBundle: ~
                myVendormyBundleBundle: ~
                myVendormyBundleFooBundle:
                    prefix: "myVendor\myBundleFooBundle\Entity"
                    type: annotation
                    is_bundle: true
                    dir: "/Entity"
        formacions:
            connection: formacions
            mappings:
                myVendormyBundleFooBarBundle:
                    prefix: "myVendor\myBundleFooBarBundle\View"
                    type: annotation
                    is_bundle: false
                    dir: "%kernel.root_dir%/../src/myVendor/myBundleFooBarBundle/View"

Проблема заключается в том, что при использовании отношений между сущностями в разных каталогах я получаю следующую ошибку, вызванную vendor/doctrine/lib/Doctrine/ORM/Mapping/MappingException.php at line 142

Класс FRJPC \ SalleUrlFormacionsBundle \ Entity \EspecialitatContingut не является допустимым объектом или сопоставленным суперклассом

Проблема заключается в том, что иногда "\" перед именем поставщика нарушает пространство имен.Это действительно странно.

Вот как ii связывают сущности между собой:



namespace myVendor\myBundleFooBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity( repositoryClass="myVendor\myBundleFooBundle\Repository\ARepository" )
 * @ORM\ChangeTrackingPolicy( "DEFERRED_EXPLICIT" )
 * @ORM\Table( name="a" )
 */
class A
{
    /**
     * @ORM\Id
     * @ORM\Column( type="integer", length="4" )
     * @ORM\GeneratedValue( strategy="AUTO" )
     */
    private $id;

    /** 
     * @ORM\ManyToOne( targetEntity="\myVendor\myBundleFooBarBundle\Entity\B", inversedBy="a", cascade={"persist"} )
     * @ORM\JoinColumn( name="FooBar", nullable=true, referencedColumnName="FooBar", onDelete="CASCADE" )
     */
    private $fooBar;
}

Вторая сущность:


namespace myVendor\myBundleFooBarBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity( repositoryClass="myVendor\myBundleFooBarBundle\Repository\ARepository" )
 * @ORM\ChangeTrackingPolicy( "DEFERRED_EXPLICIT" )
 * @ORM\Table( name="a" )
 */
class B
{
    /**
     * @ORM\Id
     * @ORM\Column( type="integer", length="4" )
     * @ORM\GeneratedValue( strategy="AUTO" )
     */
    private $id;

        /** @ORM\OneToMany( targetEntity="\myVendor\myBundleFooBundle\Entity\EspecialitatContingut", mappedBy="fooBar" ) */
        private $a;
}

Есть ли у кого-нибудь подсказка о том, как я должен связывать каждую сущность?

PD: Обе сущности работают как шарм, когда находятся в одном комплекте и в одном каталоге.

1 Ответ

3 голосов
/ 17 февраля 2012

Все эти Foos и Bars в сочетании с сообщением об ошибке с настоящим именем затрудняют отслеживание и оставляют открытой возможность того, что отправленный код действительно не соответствует реальному коду. FooBarBundle / View кажется маловероятным местом для хранения сущностей.

В любом случае данный менеджер сущностей, такой как формации, должен иметь возможность видеть все соответствующие сущности, в том числе вовлеченные в отношения. Похоже, вы определили A в пакете foo и B в пакете bar, и они оба ссылаются друг на друга?

Из вашей конфигурации я не вижу, как formacion em может видеть вашу сущность A, а также я не вижу, как em по умолчанию может видеть сущность B. Полного имени класса в отношении недостаточно, чтобы разделить метаданные доктрины сущности. Отсюда и сообщения об ошибках.

Я бы на самом деле был бы рад ошибиться. Немного расстраивает, что я не могу делать такие вещи.

...