簡體   English   中英

如何在控制器中的Symfony存儲庫查詢中放置where子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM