我有一个具有Knp Doctrine行为的实体Translatable and Sluggable。一切正常,所以当我创建或更新条目时,从标题生成的每种语言都有一个slug。
问题是如何通过翻译的slug找到一个条目?
这会抛出一个错误“没有字段'slug'”:
$this->getDoctrine()->getRepository('AcmeTestBundle:News')->findOneBySlug($slug);
答案 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));
希望这有帮助。