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 回答