0

最初はこれを使っています

$entities = $em->getRepository('AcmePanduBundle:Checklist')->findAll();

変数が存在する場合pid、クエリを何かでフィルタリングする必要があります

$entities = $em->getRepository('AcmePanduBundle:Checklist')->findAll('where pid=1')

存在しない場合は、findAll が機能するはずです。

コントローラーでそれを行うことはできますか、それともリポジトリ クラスでカスタム関数を作成する必要がありますか?

4

2 に答える 2

1

もちろん、コントローラーでそれを行うことができます:

$entities = (isset($pid))
    ? $em->getRepository('AcmePanduBundle:Checklist')->findByPid($pid)
    : $em->getRepository('AcmePanduBundle:Checklist')->findAll();

ただし、これはカスタム リポジトリが作成されたタイプのものです。このロジックを複数の場所で複製する予定がある場合は、間違いなく作成します。

次のようになります。

// src/Acme/PanduBundle/Repository/ChecklistRepository.php
namespace Acme\PanduBundle\Repository;

use Doctrine\ORM\EntityRepository;

class ChecklistRepository extends EntityRepository
{
    public function findAllWithOptionalPid($pid = null)
    {
        if($pid)
            return $this->findByPid($pid);
        return $this->findAll();
    }
}

...Doctrine 設定でこのリポジトリを参照することを忘れないでください。設定に使用している方法 (xml、yml、注釈) はわかりませんが、そのためのドキュメントは次のとおりです: http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes

これが完了すると$em->getRepository('AcmePanduBundle:Checklist')->findAllWithOptionalPid($pid);、 $pid 変数の有無にかかわらず、コントローラーの呼び出しは期待どおりに機能します。

于 2012-08-15T07:44:03.987 に答える
0

findBy または「findByPid」などの動的メソッドを使用する

$repository = $em->getRepository('AcmePanduBundle:Checklist');
if ($pid) {
    $entities = $repository->findBy(array('pid' => $pid));
    // or: $entities = $repository->findByPid($pid);
} else {
    $entities = $repository->findAll();
}
于 2012-08-15T07:43:57.133 に答える