在PHP Symfony中一次获取一个Mysql行

时间:2014-08-20 18:33:24

标签: php mysql symfony

我在mysql表中有大约10000条记录,其中包含id,info和ip列。 ip列是空的。我想在页面刷新时一次显示一行。对于显示的每一行,我想存储刷新页面的客户端的IP。因此,无论何时从该IP刷新页面,它都会显示相同的信息。

我希望我解释得很清楚。如何在每次刷新页面时确保它显示正确的行,并且我不会进行额外的mysql查询。

目前我每次打开页面然后过滤它时都会获取所有行,但我知道这样做效率不高。请帮忙

2 个答案:

答案 0 :(得分:1)

将iterate()方法与批处理一起使用。

http://docs.doctrine-project.org/en/2.0.x/reference/batch-processing.html

如果您只需要一部分记录,则可以使用setFirstResult($num) and setMaxResults($num)

答案 1 :(得分:1)

我希望了解你。因此,您希望向已保存的IP显示相同的行:

// Controller...
$ip = $container->get('request')->getClientIp(); // The ip

$em = $this->getDoctrine()->getManager(); // Get the Entity Manager

// First check if the ip has assigned a record
$record = $em->getRepository('AcmeStoreBundle:Records')
    ->findOneByIp( $ip );

if( !$record ){ // There isn't a IP assigned
    $record = $em->getRepository('AcmeStoreBundle:Records')
               ->findOneBy( array('ip' => null) ); // Get other record to assign
    $record->setIp( $ip );
    $em->flush(); // Save the ip
}

return new Response('Record info: ' . $record->getInfo() );

在获得相同的IP记录后,第一次没有使用记录。