我有一个具有 Knp Doctrine 行为 Translatable 和 Sluggable 的实体。一切正常,因此当我创建或更新条目时,标题生成的每种语言都有一个 slug。
问题是我如何通过翻译的 slug 找到条目?
这将引发错误“没有字段'slug'”:
$this->getDoctrine()->getRepository('AcmeTestBundle:News')->findOneBySlug($slug);
我有一个具有 Knp Doctrine 行为 Translatable 和 Sluggable 的实体。一切正常,因此当我创建或更新条目时,标题生成的每种语言都有一个 slug。
问题是我如何通过翻译的 slug 找到条目?
这将引发错误“没有字段'slug'”:
$this->getDoctrine()->getRepository('AcmeTestBundle:News')->findOneBySlug($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();
}
}
我发现这种方法有效,尽管我仍然很好奇是否有更通用的解决方案
尝试这个:
$this->getDoctrine()
->getRepository('AcmeTestBundle:News')
->findOneBy(array("slug"=>$slug));
希望这可以帮助。