可翻译的Knplabs:如何通过可翻译的领域找到一个条目?

时间:2013-08-04 11:31:11

标签: symfony localization doctrine-orm

我有一个具有Knp Doctrine行为的实体Translatable and Sluggable。一切正常,所以当我创建或更新条目时,从标题生成的每种语言都有一个slug。

问题是如何通过翻译的slug找到一个条目?

这会抛出一个错误“没有字段'slug'”:

$this->getDoctrine()->getRepository('AcmeTestBundle:News')->findOneBySlug($slug);

2 个答案:

答案 0 :(得分:3)

除非某人有更聪明的方法,否则您需要创建一个自定义存储库方法,该方法执行实体转换表的连接以执行查找:

use Doctrine\ORM\EntityRepository;

/**
 * NewsRepository
 */
class NewsRepository extends EntityRepository
{
    public function findOneBySlug($slug)
    {
        $qb = $this->createQueryBuilder('n')
            ->select('n, t')
            ->join('n.translations', 't')
            ->where('t.slug = :slug')
            ->setParameter('slug', $slug);

        return $qb->getQuery()->getSingleResult();
    }
}

我发现这种方法有效,但我仍然很好奇是否有更通用的解决方案

答案 1 :(得分:-1)

试试这个:

$this->getDoctrine()
->getRepository('AcmeTestBundle:News')
->findOneBy(array("slug"=>$slug));

希望这有帮助。