在 Symfony 中,我使用默认的 ORM 原则,但是这个工具不能给我足够的方法来处理不同的情况。我想编写自己的类并使用 DBAL 之类的东西,仅用于进行自定义 SQL 查询并获取结果的连接。谁能给我一些例子?我应该使用哪些类来制作模型层,扩展我的功能。
问问题
97 次
2 回答
0
作为一个好的做法,您可以将所有自定义查询(SQL 或 DQL)放在EntityRepository
这是自定义 EntityRepository 的示例
use Doctrine\ORM\EntityRepository;
use \Doctrine\Common\Collections\Criteria;
/**
* RequestRepository
*
*/
class RequestRepository extends EntityRepository
{
public function findByStatus($status = array(), $limit = 5, $orderBy = null)
{
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder
->select('n')
->from('BaseBundle:Request', 'n')
->where('n.status IN (:status)')
->setParameter('status', $status)
->setMaxResults($limit);
if (!is_null($orderBy)) {
$queryBuilder->orderBy('n.' . $orderBy[0], $orderBy[1]);
}
$lines = array();
foreach ($queryBuilder->getQuery()->getResult() as $line) {
$lines[] = $line;
}
return $lines;
}
public function getByExpressions($expressions = array(), $limit = 5, $orderBy = null)
{
$criteria = Criteria::create();
if (!empty($expressions)) {
foreach ($expressions as $expression) {
$criteria->andWhere($expression);
}
}
$criteria->setMaxResults($limit);
if (!is_null($orderBy)) {
$criteria->orderBy($orderBy);
}
return $this->matching($criteria);
}
}
在实体代码中,您定义此自定义存储库,如下所示:
use Doctrine\ORM\Mapping as ORM;
/**
* Request
*
* @ORM\Table(name="request")
* @ORM\Entity(repositoryClass="BaseBundle\Repository\RequestRepository")
*/
class Request
{
//Entity code, irrelevant here
}
于 2014-09-09T09:13:00.543 回答
0
如果您想使用学说编写自己的 SQL 查询,可以查看该文档页面: http ://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html
但大多数时候 DQL 绰绰有余
这是我做的一个项目,忽略我的 sql 查询
//Daily Alerts
$dailyAlertsQuery = $em
->createQuery("
SELECT COUNT (a) AS daily
FROM XXX\xxxBundle\Entity\Alert a
JOIN a.user u
WHERE a.mentionUpdate = '1'
AND u.isActive = '1'
")
->getResult();
$dailyAlerts = new ArrayCollection($dailyAlertsQuery);
于 2014-09-09T08:28:10.913 回答