有兩個主要關注在你的問題
- 您的存儲庫方法的參數太多,這將在最終的查詢「其中」條件下使用。要組織他們以更好的方式
- 存儲庫方法應該是從控制器調用,因爲傳遞
我建議你寫這樣一個信息庫方法的參數可能複雜有意義的方式:
namespace AcmeBundle\Repository;
/**
* ProchaineOperationRepository
*
*/
class ProchaineOperationRepository extends \Doctrine\ORM\EntityRepository
{
public function search($filters, $sortBy = "id", $orderBy = "DESC")
{
$qb = $this->createQueryBuilder("po");
foreach ($filters as $key => $value){
$qb->andWhere("po.$key='$value'");
}
$qb->addOrderBy("po.$sortBy", $orderBy);
return $qb->getQuery()->getArrayResult();
}
}
的$filters
變量這裏是應該抱着你要在「那裏」的條件使用的過濾器陣列。 $sortBy
和$orderBy
也應該是有用的,正確排序的方式來獲得結果現在
,你可以從你的控制器一樣調用庫方法:
class ProchaineOperationController extends Controller
{
/**
* @Route("/getById/{id}")
*/
public function getByIdAction($id)
{
$filters = ['id' => $id];
$result = $this->getDoctrine()->getRepository("AcmeBundle:ProchaineOperation")->search($filters);
//process $result
}
/**
* @Route("/getByTitle/{title}")
*/
public function getByTitleAction($title)
{
$filters = ['title' => $title];
$sortBy = 'title';
$result = $this->getDoctrine()->getRepository("AcmeBundle:ProchaineOperation")->search($filters, $sortBy);
//process $result
}
/**
* @Route("/getByIdAndDateMin/{id}/{dateMin}")
*/
public function getByIdAndDateMinAction($id, $dateMin)
{
$filters = ['id' => $id, 'dateMin' => $dateMin];
$sortBy = "dateMin";
$orderBy = "ASC";
$result = $this->getDoctrine()->getRepository("AcmeBundle:ProchaineOperation")->search($filters, $sortBy, $orderBy);
//process $result
}
}
請注意,您所要求的所有相同的庫法控制器操作根據您的參數進行微小的更改。還要注意$sortBy
和$orderBy
是可選的傳遞。
希望它有幫助!
您的第一個最佳做法可能是回答您的問題。這是您在5個小時內發佈的第三個問題。另外兩個人有評論和答案,但沒有回覆你。它看起來像你問了50個問題,只接受了一個答案?讓人驚訝。通過海報駕駛不應期望太多的幫助。 – Cerad