0

Knp Doctrine ビヘイビア Translatable および Sluggable を持つエンティティがあります。すべてが正常に機能するため、エントリを作成または更新すると、タイトルから生成された各言語のスラッグがあります。

質問は、翻訳されたスラッグでエントリを見つけるにはどうすればよいですか?

これにより、「フィールド '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 に答える