2012-01-21 7 views
0

ここには、あなたのアプリケーションを、そのエンティティで動作するバンドルで整理することに対する懸念の分離についての記事があります。しかし、これらのエンティティが異なるバンドルを通じて関連しているという点は述べていません。Symfony2:既存のデータベースを別のバンドルにインポートする方法

投稿、コメント、タグ、ユーザー、ロールなどのテーブルを含む既存のデータベースが既にあるので、この定義を新しいsymfony2プロジェクトにインポートしたいと思います。 私の問題は、BlogBu​​ndle、UserBundle、StaticBundleなどの異なるバンドルでそれを持っていたいということですが、それぞれのエンティティを正しいバンドルにインポートする方法はわかりません。 さらなる問題は、ユーザーエンティティが投稿エンティティとコメントエンティティ内で参照されるため、どうすればよいかです。投稿、コメント、タグをBlogBu​​ndleにインポートすると、ユーザーエンティティはまだ存在しません。

誰もがそのプロセスを進める上でのヒントを教えてくれますか?

答えて

0

エンティティはバンドル間で共有されます(もちろん)。 ブログを作成したい場合は、UserBundle(これは恐らくFOSUserBundleという素晴らしいものを上書きする可能性があります)とBlogBu​​ndleを作成することができます。 UserBundleにはUserエンティティが含まれ、BlogBu​​ndleには投稿エンティティとコメントエンティティが含まれます。コードの は今の例:あなたのUserBundleで

:あなたのBlogBu​​ndleで

<?php 

namespace YourVendorName\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="my_user_table") 
* @ORM\Entity(repositoryClass="YourVendorName\UserBundle\Entity\UserRepository") 
*/ 
class User 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="name") 
    */ 
    private $name; 

    // Getters and setters... 
} 

<?php 

namespace YourVendorName\BlogBundle\Entity; 

class Post 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="title", type="string", length=255) 
    */ 
    private $title; 

    /** 
    * @ORM\Column(name="body", type="text") 
    */ 
    private $body; 

    /** 
    * @ORM\Column(name="created_at", type="datetime") 
    */ 
    private $createdAt; 

    /** 
    * @ORM\ManyToOne(targetEntity="YourVendorName\UserBundle\Entity\User") 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    */ 
    private $author; 

    // Getters and setters 
} 

ですから、別のバンドルで、このような注釈のおかげで、エンティティを参照:

@ORM\ManyToOne(targetEntity="YourVendorName\UserBundle\Entity\User") 

とにかく、あなたは本当にSymfony2 documentation、それはあなたがすべてを理解するのに役立つかもしれません。

+0

あなたの答えはthxです。それはまさに私が探していたものですが、私はすでにその方法について考えていました。既存のデータベースから異なるバンドルへの「自動生成」エンティティの時点でのみスタックされます。しかし、今私はまだいくつかの手が必要であることを認識しました:-)私はこの方法で試してみましょう! – Andreas

+0

あなたの質問が「doctrine:mapping:import」コマンドを使って異なるバンドルにエンティティをディスパッチするのに十分なほどスマートなのかどうかは、答えはいいえ:)あなたはエンティティを良いフォルダに移動するだけです。その教義を忘れないでください:マッピング:インポートはヘルパーに過ぎず、生成されたエンティティを完成させる必要があります。 – Nanocom

+0

あなたはまさにそうです、それはヘルパーツールです。私は今、私のuserbundleで私のユーザーと役割のエンティティを終了し、その後私のblogbundleからの参照を続けます。 – Andreas

関連する問題