0

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

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

这将引发错误“没有字段'slug'”:

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

2 回答 2

4

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

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();
    }
}

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

于 2013-08-07T11:59:00.750 回答
-1

尝试这个:

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

希望这可以帮助。

于 2013-08-04T22:39:32.403 回答