我正在使用提供的学说 DoctrinePaginator ( https://github.com/doctrine/DoctrineORMModule/blob/master/src/DoctrineORMModule/Paginator/Adapter/DoctrinePaginator.php )
但我遇到了非常非常奇怪的行为。
这是我使用 SQL Developer 运行的 SQL的屏幕截图 ( http://i.stack.imgur.com/ePL1F.jpg )(在此处运行 oracle 11g)。这基本上就是教义正在运行的内容。正如您在记录 100 中看到的那样,是一个姓氏“Allen”的人。当我尝试在我的视图文件中显示记录时,会发生奇怪的行为。
第 2 个屏幕截图 ( http://i.imgur.com/3TxgeI3.jpg ) 是在 $recordsPerPage 设置为 100 的情况下制作的(请参阅下面的控制器代码)。图片顶部会告诉您使用的 SQL ($queryBuilder->getDql())。从图片中可以看出,页面中的最后一个人是姓“Azamov”的人。根据我在 SQL developer 中运行的 SQL,记录 100 中的人应该是姓氏“Allen.
您还可以在“Azamov”下方看到数字 100。这是通过在我的视图页面中初始化一个名为 $tempCounter 的变量然后使用 ++$tempCounter 递增它来计算的。(查看最后的代码)
您在图像顶部附近看到的 290 数字来自 $adapter->count()(也可以在下面的控制器代码中找到)。
这第三张截图 ( http://i.imgur.com/3qhVixW.jpg ) 是在 $recordPerPage 设置为 200 的情况下制作的。同样,“Azamov”是最后一个人。
在我看来,不知何故,显示的记录没有遵循我在 SQL 中设置的任何顺序。
有什么想法可能是错的吗?谢谢
这是我的控制器代码
public function searchAction() {
$recordsPerPage = 100;
if ($this->request->isGet()) {
$form = new DirectorySearchForm();
$directory = new DirectoryModel();
$form->setInputFilter($directory->getInputFilter());
$form->setData($this->request->getQuery());
if ($form->isValid()) {
$directoryDao = new DirectoryDao();
$directory->populate($form->getData());
$adapter = new DoctrineAdapter(new ORMPaginator($directoryDao->searchStaffDirectory($this->getEntityManager()->createQueryBuilder(), $directory)));
$paginator = new Paginator($adapter);
$paginator->setItemCountPerPage($recordsPerPage);
$page = (int)$this->params()->fromQuery("page");
$paginator->setCurrentPageNumber($page);
//var_dump();
return array(
"staffList" => $paginator,
"recordCount" => $adapter->count(),
"recordsPerPage" => $recordsPerPage,
);
}
}
return $this->viewModel;
}
我的查看代码
<?php
// Declare temporary variables here
$oddEven = array('odd', 'even');
$tempCounter = 0;
?>
Found <?php echo $recordCount; ?> records<br />
<table>
<tr>
<td colspan="4"><a style="text-decoration: none" title="Many different prefixes apply to campus extensions. Click on name or phone number for contact details."><h2>Click on name or phone number for contact details</h2></a></td>
</tr>
<tr>
<th scope="col" class="searchResults highlightOrgStructure">name</th>
<th scope="col" class="searchResults highlightOrgStructure">Telephone</th>
<th scope="col" class="searchResults highlightOrgStructure">Position</th>
<th scope="col" class="searchResults highlightOrgStructure">Department</th>
</tr>
<script type="text/javascript">
$(function () {
$(document).tooltip({
content: function () {
return $(this).prop('title');
}
});
});
</script>
<?php foreach($staffList as $staff) { ?>
<?php ++$tempCounter; ?>
<tr class="<?php echo $oddEven[$tempCounter % 2]; ?>">
<td class="searchResults"><?php echo $staff->surname; if (strlen($staff->firstname) > 0) { echo ", ". $staff->firstname . " " . $staff->title; } ?></td>
<td class="searchResults"><?php echo $staff->telephoneNumber; ?></td>
<td class="searchResults"><?php echo $staff->role; ?></td>
<td class="searchResults"><?php echo $staff->department; ?></td>
</tr>
<?php } ?>
</table>
<?php echo $tempCounter."<hr>"; ?>