[英]How can i put where clause in symfony repository query in controller
最初我在用這個
$entities = $em->getRepository('AcmePanduBundle:Checklist')->findAll();
現在,我希望如果存在pid
變量,那么它應該使用某些內容過濾查詢
$entities = $em->getRepository('AcmePanduBundle:Checklist')->findAll('where pid=1')
如果它不存在,則findAll應該工作。
我可以在控制器中執行此操作,還是必須在存儲庫類中創建自定義函數?
當然,您可以在控制器中執行此操作:
$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變量,它都將按您預期的那樣工作。
使用findBy或動態方法(例如“ findByPid”)
$repository = $em->getRepository('AcmePanduBundle:Checklist');
if ($pid) {
$entities = $repository->findBy(array('pid' => $pid));
// or: $entities = $repository->findByPid($pid);
} else {
$entities = $repository->findAll();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.