それぞれが独自のデータベースを持つ2つのモジュールを含むZF2アプリケーションでDoctrine2を使用しようとしています。あるモジュールのエンティティを別のモジュールのエンティティに関連付けることができるように、データベース間結合を使用する必要があります。これがセットアップのUML図です。
私はこれを最初のエンティティで使用してみました(無関係なパラメーターとuse
ステートメントを削除しました):
namespace Client\Entity;
/**
* A website.
*
* @ORM\Entity
* @ORM\Table(name="users.website")
* ...
* @property $server
*/
class Website extends BaseEntity {
// Other class vars ...
/**
* @ORM\ManyToOne(targetEntity="Server\Entity\Server", inversedBy="websites")
* @ORM\JoinColumn(name="server_id", referencedColumnName="id")
*/
protected $server;
そしてこれは私のサーバーエンティティで:
namespace Server\Entity;
/**
* A server.
*
* @ORM\Entity
* @ORM\Table(name="servers.server")
* ...
* @property $websites
*/
class Server extends BaseEntity {
// Other class vars ...
/**
* @ORM\OneToMany(targetEntity="Client\Entity\Website", mappedBy="server")
*/
protected $websites;
DoctrineModule\Form\Element\ObjectSelect
このマッピングは、(サーバーの関連付けに使用するWebフォームを介して)新しいWebサイトエンティティを作成するときに完全に機能しますが、既存のWebサイトを編集しようとすると、次のReflectionExceptionがスローされます。
クラスServer\Entity\Websiteが存在しません
完全なスタックトレースはここにあります。何らかの理由で、サーバーエンティティがWebサイトエンティティとの関連付けからアクセスされると、すべてのエンティティがではServer\Entity
なく名前空間に存在すると見なされますClient\Entity
。サーバーエンティティが正しいモジュール名前空間にあることを確認するには、何をする必要がありますか?
CLIコマンドorm:info
は以下を生成します。
Found 7 mapped entities:
[OK] Server\Entity\Server
[OK] Client\Entity\Role
[OK] Client\Entity\Website
[OK] Client\Entity\User
[OK] Client\Entity\Client
[OK] Client\Entity\Permission
[OK] Message\Entity\Notification
しかし、orm:validate-schema
結果は次のようになります。
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.
私は私のモジュールのそれぞれにこれを持っていますmodule.config.php
:
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
)