もちろん、コントローラーでそれを行うことができます:
$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 変数の有無にかかわらず、コントローラーの呼び出しは期待どおりに機能します。