Symfony KNPLAB可翻译:如何通过可翻译字段查找条目?

Symfony KNPLAB可翻译:如何通过可翻译字段查找条目?,symfony,localization,doctrine-orm,Symfony,Localization,Doctrine Orm,我有一个实体具有Knp学说行为可翻译和可插入。一切正常,所以当我创建或更新条目时,标题生成的每种语言都有一个slug 问题是如何通过翻译的slug找到条目 这将抛出一个错误“没有字段“slug”: 试试这个: $this->getDoctrine() ->getRepository('AcmeTestBundle:News') ->findOneBy(array("slug"=>$slug)); 希望这能有所帮助。除非有人有更聪明的方法,否则您将需要创建一个自定义存储库

我有一个实体具有Knp学说行为可翻译和可插入。一切正常,所以当我创建或更新条目时,标题生成的每种语言都有一个slug

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

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

试试这个:

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

希望这能有所帮助。

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

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();
    }
}
我发现这种方法是有效的,尽管我仍然好奇是否有一种更通用的解决方案来解决这个问题

不,它没有帮助:“未识别的字段:slug”。我认为问题在于有两个表,一个用于没有翻译的字段,另一个用于翻译。下面是一个类似的问题,但对于Gedmo包,您可以使用提示进行查询:
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();
    }
}