0

したがって、2 つのエンティティがあります。1 つはリポジトリがあり、もう 1 つはそうではありません。別のテーブルからデータを取得しようとすると、ArrayCollection データが取得されます。問題は、このエンティティ リポジトリ メソッドを呼び出す方法です。それは本当ですか?

例:

    $system = $this
            ->getDoctrine()
            ->getEntityManager()
            ->getRepository('SomeBundle:FirstEntity')
            ->findOneByColumnID($id);

    $den = $system->getDataFromSecondTable(); // ArrayCollection of SecondEntity

そして、私はいくつかの種類を使用したい:

    $den[0]->functionFromSecondEntityRepository();

したがって、メソッド「functionFromSecondEntityRepository」はクラス SecondEntity のリポジトリにあり、呼び出すことができません - 未定義のメソッド呼び出し「functionFromSecondEntityRepository」でエラーが発生しました。

では、どうすれば正しい方法でそれを行うことができますか?

4

2 に答える 2

1

あなたはあまりにも多くの詳細を提供しなかったので、ここでいくつかの例を作ります.

FriendsListEntity と EntityとのOne-to-Many関係があるとしましょうFriend

$List = $this->getDoctrine()
                ->getEntityManager()
                ->getRepository('SomeBundle:FriendsList')
                ->find($id);

// The list you pulled in by ID can now be used
$List->getId();

foreach($List->getFriends() as $Friend)
{
    // Each friend will be output here, you have access
    // to the Friend methods now for each.
    $Friend->getId();
    $Friend->getFirstName();
    $Friend->getLastName();
    $Friend->getDOB();
    $Friend->getFavoriteColor();
}

デフォルトでは、リレーションシップを作成すると、コレクションを取得するメソッドが作成されます。この例getFriendsでは、エンティティの配列を返します。エンティティを生成したら、エンティティ モデルを見て、利用可能なメソッドを確認します。デフォルトでは、エンティティ内のプロパティごとに 1 つ作成され、コレクション用に追加のものが作成されます。

SomeCool/Bundle/Entity/FriendsList
Somecool/Bundle/Entity/Friend

YAML 構成を使用する場合、1 対多の関係は次のようになります。

SomeCool\Bundle\Entity\FriendsList:
  type: entity
  table: null
  oneToMany:
    friend:
      targetEntity: Friend
      mappedBy: friendslist
      cascade:  ["persist"]

SomeCool/Bundle/Entity/Friend
  manytoOne:
    friends:
      targetEntity: FriendsList
      mappedBy: friend
      cascade:  ["persist"]

リポジトリへのアクセス

YAML 構成 (services.yml)

somebundle.bundle.model.friends:
    class: SomeBundle/Bundle/Model/Friends
    arguments: [@doctrine.orm.entity_manager]

コントローラーについて

$friendsModel = $this->get('somebundle.bundle.model.friends');
$Friends = $friendsModel->findByFirstName('Bobby');

foreach($Friends as $Friend)
{
    $Friend->getLastName();
}
于 2013-01-14T13:47:37.453 に答える
0

リポジトリ メソッドはエンティティでは使用できません。ArrayCollection を取得するには、AnotherEntity に関数が必要です。いいえ:

class FirstEntity {

   public function getAnotherEntity()
   {
       return $this->anotherEntity;
   }

}

class AnotherEntity 
{
   public function getArrayCollection()
   {
       return $this->myArrayCollection;
   }
}

$firstEntity->getAnotherEntity()->getArrayCollection();

別のオプションは、最初の結果に基づいて AnotherEntity のリポジトリを取得することです。

$system = $this
        ->getDoctrine()
        ->getEntityManager()
        ->getRepository('SomeBundle:SomeEntity')
        ->findOneByColumnID($id);

$anotherEntity = $system->getAnotherEntity();

$anotherEntityResult = $this->getDoctrine()
                            ->getRepository(get_class($anotherEntity))
                            ->functionFromAnotherEntityRepository($anotherEntity->getId());

2 番目のソリューションを使用する場合は、リポジトリを取得する前に $anotherEntity が null でないことを確認します。

于 2013-01-14T13:38:55.270 に答える