我正在尝试进行分页,但是有一个错误:
[语法错误]第0行,第57栏:错误:字符串的预期结束,得到'限制'
我不太确定这是否是正确的语法(和逻辑)来进行查询:
public function getFriendsFromTo ($user, $limit, $offset)
{
return $this->getEntityManager()
->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.user='.$user.' limit '.$limit. 'offset' .$offset)
->getResult();
}
朋友和用户关联manyToOne和oneToMany,所以在friends表中有一个字段 - user_id。
这是在我的控制器中:
$user = $this->get('security.context')->getToken()->getUser();
$id = $user->getId();
$friends = $user->getFriends();
$result = count($friends)
$FR_PER_PAGE = 7;
$pages = $result/$FR_PER_PAGE;
$em = $this->getDoctrine()->getEntityManager();
$friends = $em->getRepository('EMMyFriendsBundle:Friend')
->getFriendsFromTo($id, $FR_PER_PAGE, $page*$FR_PER_PAGE);
我知道这很愚蠢甚至是错误的(特别是第三个参数是$page*$FR_PER_PAGE
),但我只想尝试查询是否有效,但事实并非如此。
答案 0 :(得分:121)
不。使用:
return $this->getEntityManager()
->createQuery('...')
->setMaxResults(5)
->setFirstResult(10)
->getResult();
答案 1 :(得分:30)
$towary = $this->getDoctrine()
->getRepository('AcmeStoreBundle:Towar')
->findBy(array(),array(),10,($current-1)*$numItemsPerPage);
答案 2 :(得分:18)
您可以使用findBy
和limit
的doctrine资源库方法的offset
第3和第4个参数。
以下是方法定义:
findBy(
array $criteria,
array $orderBy = null,
integer|null $limit = null,
integer|null $offset = null
)
来源:http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html
答案 3 :(得分:1)
您也可以使用
$查询 - > getSingleResult();
答案 4 :(得分:0)
Doctrine2.6,偶然发现了这个旧帖子,并尝试了DQL方式,但它不适合此目的。因此,如果您想避免使用DQL因为已经将实体映射并连接在一起,则可以使用 matching&Criteria
进行分页$criteria = Criteria::create()
->setMaxResults($limit ? $limit : null)
->setFirstResult($offset ? $offset : null)
$result = $em->getRepository('EMMyFriendsBundle:Friend')
->matching($criteria)->toArray();