5

ここのドキュメントで説明されているように、DoctrineモデルクラスでカスタムfindOneByJoinedToCategory($ id)関数を設定する例に従いました。

http://symfony.com/doc/current/book/doctrine.html

私の場合、一連の属性とこの関数を含むTestVendorCategoryというモデルクラスがあります。

public function findOneByNameJoinedToVendorCategoryMappings($vendorCategoryName)
    {
        $query = $this->getEntityManager()
        ->createQuery('
                SELECT vc, vcm FROM TestCoreBundle:VendorCategory vc
                JOIN vcm.vendorCategoryMapping vcm
                WHERE vc.name = :name'
        )->setParameter('name', $vendorCategoryName);

        try
        {
            return $query->getSingleResult();
        }
        catch (\Doctrine\ORM\NoResultException $e)
        {
            return null;
        }
    }

私のコントローラーでは、次のように呼んでいます。

$vendorCategoryMapping = $this->em->getRepository("TestCoreBundle:VendorCategory")->findOneByNameJoinedToVendorCategoryMappings($vendorCategoryName);

ブラウザに移動し、この呼び出しを含むこのアクションを実行すると、次のエラーメッセージが表示されます。

エンティティ'Test\ CoreBundle \ Entity\VendorCategory'にはフィールド'nameJoinedToVendorCategoryMappings'がありません。したがって、エンティティのリポジトリで「findOneByNameJoinedToVendorCategoryMappings」を呼び出すことはできません。

Symfony 2.1は、findOneBy ...()メソッドに既存のフィールドの名前のみを反映させ、カスタムの「JoinedTo...」タイプのメソッドを反映させたくないようです。何か足りないのでしょうか?ドキュメントには、おそらく機能するこのような例が示されています。アノテーションを使用していますが、このメソッドにはアノテーションがありません。ありがとうございました!

4

1 に答える 1

6

findOneByNameJoinedToVendorCategoryMappings関数をVendorCategoryRepositoryクラスに配置する必要があります。

<?php
namespace Test\CoreBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;

class VendorCategoryRepository extends EntityRepository
{
    public function findOneByNameJoinedToVendorCategoryMappings($vendorCategoryName)
    {
        $query = $this->getEntityManager()
            ->createQuery('
            SELECT vc, vcm FROM TestCoreBundle:VendorCategory vc
            JOIN vcm.vendorCategoryMapping vcm
            WHERE vc.name = :name'
        )->setParameter('name', $vendorCategoryName);

        try
        {
            return $query->getSingleResult();
        }
        catch (NoResultException $e)
        {
            return null;
        }
    }
}

エンティティ内のこのリポジトリクラスをリンクします。

/**
 * @ORM\Entity(repositoryClass="Test\CoreBundle\Entity\VendorCategoryRepository")
 */
class VendorCategory
于 2013-03-02T23:06:48.183 に答える