2016-09-06 17 views
0

私のプロジェクト(https://github.com/FriendsOfSymfony/FOSMessage)でFOSMessageを使用しており、エンティティのテーブル名をオーバーライドしたいと思います。Symfony 3 |エンティティテーブル名をオーバーライド

は、例えばFOSMessage(\ FOS \メッセージ\ドライバ\教義\ ORM \エンティティ\会話)に私が持っている:

/** 
* @ORM\Table(name="fos_message_conversations") 
* @ORM\Entity 
*/ 
class Conversation extends BaseConversation 
... 
// properties 
... 

そして、私のカスタムエンティティでは、私は:

/** 
* @ORM\Table(name="user__message__fos_message_conversations") 
* @ORM\Entity 
*/ 
class Conversation extends \FOS\Message\Driver\Doctrine\ORM\Entity\Conversation 
{ 

} 

それは「無関係」のプロパティに対してのみ機能します。 「1対多数」の関係を持つプロパティがあり、無視されます。 私のデータベースを更新するとき、私はテキストのプロパティとIDのみを持っています。私は例えば "メッセージ"の関係を持っていません。

どうすればいいですか?テーブル名を変更したいだけです。 many側の

答えて

1

oneToManyニーズの関連マッピング、したがって、あなたはあなたのカスタムConversationを指しマッピングmanyToOneでもカスタムMessageエンティティが必要になります。

実際にはRMDBSでは、外部キーはmanyのサイドテーブルにあります。この場合はmessageテーブルです。メッセージにはconversation_idという列があり、その逆もありません。

+0

こんにちはdragoste、あなたの答えをありがとう、これは非常に明確です。したがって、カスタムクラスを作成し、バンドル内のものから継承してtable_nameを変更する方法はありませんか?すべての関係プロパティを再作成し、新しいカスタムエンティティとの関係「OneToMany」を書き直さなければならないのですか? – Aximem

+0

はい。どのようにそれを想像しますか? 'Message :: conversation_id'はどこに向いていますか?カスタムの「会話」やFOSの「\ FOS \メッセージ\ドライバ\教義\ ORM \エンティティ\会話」?さて、それはFOSのクラスにマッピングされており、それがあなたの問題の原因です。 –

+0

はい、バンドルエンティティテーブル名を拡張せずに変更することはできません。そして私たちがそれを拡張するとき、私たちはプロパティを書き直さなければなりませんが、私はそれを取得します。ありがとう – Aximem