17

タイトルのとおり、Doctrine 2 クエリ ビルダーを使用して正規表現をどのように照合しますか? 基本的に、ユニークなスラッグを生成しようとしています。

これが私の現在の実装です。スラッグを生成します。次に、このスラッグのような使用中のスラッグがあるかどうかを確認します。ある場合は、スラッグの末尾に -{number} を追加します。{number} は、まだ使用されていない最小の番号です。

$qb->select(array('partial o.{id, slug}'))
   ->from('Foo\Bar\Entity\Object', 'o')
   ->where($qb->expr()->like('o.slug', ':slug'));

$slug = new SlugNormalizer($text);
$qb->setParameter('slug', $slug->__toString().'-%');

ここでの問題は、LIKE slug% が foo-bar-1、foo-bar-2、および foo-bar-not-the-same-slug に一致する可能性があることです。よりクリーンになるのは、REGEX slug-(\d+) または類似のものを探す正規表現です。

Doctrine 2 クエリビルダーでこれを行う方法はありますか?

4

4 に答える 4

-1

テストされていません (MySQL の場合):

$qb->where(new Doctrine\ORM\Query\Expr\Comparison(
    'o.slug', 'REGEXP', ':slug')
);
$qb->setParameter('slug', '^'.$slug->__toString().'-[[:digit:]]+$');
于 2011-07-05T07:26:02.190 に答える