61

私はどのように行いますか

WHERE id != 1

ドクトリンで?

私はこれまでのところこれを持っています

$this->getDoctrine()->getRepository('MyBundle:Image')->findById(1);

しかし、「等しくない」を行うにはどうすればよいですか?

これはばかげているかもしれませんが、これへの参照が見つかりませんか?

ありがとう

4

6 に答える 6

51

意図したことを可能にする組み込みメソッドはありません。

次のように、リポジトリにメソッドを追加する必要があります。

public function getWhatYouWant()
{
    $qb = $this->createQueryBuilder('u');
    $qb->where('u.id != :identifier')
       ->setParameter('identifier', 1);

    return $qb->getQuery()
          ->getResult();
}

お役に立てれば。

于 2012-12-30T08:45:11.750 に答える
23

もう少し柔軟性を持たせるために、次の関数をリポジトリに追加します。

public function findByNot($field, $value)
{
    $qb = $this->createQueryBuilder('a');
    $qb->where($qb->expr()->not($qb->expr()->eq('a.'.$field, '?1')));
    $qb->setParameter(1, $value);

    return $qb->getQuery()
        ->getResult();
}

次に、次のようにコントローラーで呼び出すことができます。

$this->getDoctrine()->getRepository('MyBundle:Image')->findByNot('id', 1);
于 2013-05-24T21:16:39.340 に答える
9

私はこれをかなり簡単に(メソッドを追加せずに)解決したので、共有します:

use Doctrine\Common\Collections\Criteria;

$repository->matching( Criteria::create()->where( Criteria::expr()->neq('id', 1) ) );

ところで、私は Zend Framework 2 内から Doctrine ORM モジュールを使用していますが、これが他の場合に互換性があるかどうかはわかりません。

私の場合、次のようなフォーム要素構成を使用していました。ラジオボタン配列で「ゲスト」を除くすべてのロールを表示します。

$this->add(array(
    'type' => 'DoctrineModule\Form\Element\ObjectRadio',
        'name' => 'roles',
        'options' => array(
            'label' => _('Roles'),
            'object_manager' => $this->getEntityManager(),
            'target_class'   => 'Application\Entity\Role',
            'property' => 'roleId',
            'find_method'    => array(
                'name'   => 'matching',
                'params' => array(
                    'criteria' => Criteria::create()->where(
                        Criteria::expr()->neq('roleId', 'guest')
                ),
            ),
        ),
    ),
));
于 2014-11-13T16:49:51.057 に答える