如果我有一个关联的实体是一个集合,你在获取时有什么选择?

例如假设我有一个带有此定义的$view实体:

/**
 * @ORM\OnetoMany(targetEntity="\Gutensite\CmsBundle\Entity\View\ViewVersion",mappedBy="entity")
 * @ORM\OrderBy({"timeMod" = "DESC"})
 */
protected $versions;

public function getVersions() {
    return $this->versions;
}

我希望得到与实体相关的所有版本,如下所示:

$view->getVersions();

这将返回一个集合.大.但是有可能采取该集合并按标准过滤它,例如比某个日期更新?或者按一些(其他)标准订购?

或者此时您只是希望对存储库进行查询:

$versions = $em->getRepository("GutensiteCmsBundle:View\ViewVersion")->findBy(array(
    array(
        'viewId',$view->getId(),'timeMod',time()-3600
    )
    // order by
    array('timeMod','DESC')
));
最新版本的Doctrine中有一个令人惊讶的未知功能,它使这些查询更容易.

它似乎没有名称,但您可以在9.8 Filtering Collections的Doctrine文档中阅读它.

Collections have a filtering API that allows to slice parts of data from a collection. If the collection has not been loaded from the database yet,the filtering API can work on the sql level to make optimized access to large collections.

在您的情况下,您可以在View实体上编写这样的方法.

use Doctrine\Common\Collections\Criteria;

class View {
  // ...

  public function getVersionsNewerThan(\DateTime $time) {
    $newerCriteria = Criteria::create()
      ->where(Criteria::expr()->gt("timeMod",$time));

    return $this->getVersions()->matching($newerCriteria);
  }
}

这将做两件事之一:

>如果集合是水合的,它将使用PHP来过滤现有的集合.
>如果集合没有水合,它将使用sql约束从数据库中获取部分集合.

这真的很棒,因为将存储库方法连接到您的视图通常是混乱的并且容易中断.

我也喜欢@ igor-pantovic的回答,虽然我已经看到这种方法会导致一些有趣的错误.

php – Symfony中关联实体集合的高级过滤的更多相关文章

  1. android – 让应用程序在后台运行

    我想让我的应用程序在后台运行我有一个应用程序将用户的位置发送到我们的服务器我有以下代码:我希望我的应用程序在后台运行.我希望它在手机开机时自动启动解决方法对于您的问题,一个非常简单的答案是使用Service.它将允许您在后台执行各种任务,并且是您静默地将您的位置发送到服务器的最佳选择.阅读this答案寻求帮助.

  2. android – 如何让应用程序在后台运行?继续收集数据?

    在底部更新我编写了一个记录用户位置,当前速度,平均速度和最高速度的应用程序.我想知道如何使应用程序执行以下操作:>防止屏幕在屏幕上打开时关闭>如果用户打开另一个应用程序或返回主屏幕,接到电话等,应用程序应继续收集数据(或者每次更新位置时将所有数据写入数据库会更好吗?并且可能有一个按钮来表示何时开始和停止收集数据?

  3. android – 在网络和GPS提供商之间切换

    我想实现一个locationListener,它将根据可用性在网络和GPS提供商之间切换.例如,如果GPS未启用,我希望它使用网络,但一旦GPS打开,我希望它停止监听来自网络的位置更新,并开始从GPS听.同样地,一旦GPS被关闭,我希望它从网络开始监听更新.那可能吗?SubquestionGPS是否与网络一样快提供位置修复?

  4. Symfony2中被遗弃的getRequest()方法分析

    这篇文章主要介绍了Symfony2中被遗弃的getRequest()方法,分析了getRequest方法的实现原理及实现替代request响应的get与post相关技巧,需要的朋友可以参考下

  5. 详谈symfony window下的安装 安装时候出现的问题以及解决方法

    下面小编就为大家带来一篇详谈symfony window下的安装 安装时候出现的问题以及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. Symfony实现行为和模板中取得request参数的方法

    这篇文章主要介绍了Symfony实现行为和模板中取得request参数的方法,实例分析了Symfony针对行为和方法中参数获取的技巧,需要的朋友可以参考下

  7. Symfony2实现从数据库获取数据的方法小结

    这篇文章主要介绍了Symfony2实现从数据库获取数据的方法,结合实例形式总结分析了常用的Symfony数据库查询技巧,需要的朋友可以参考下

  8. Symfony核心类概述

    这篇文章主要介绍了Symfony核心类,简单分析了Symfony的核心类,组织结构及对应的功能,需要的朋友可以参考下

  9. Symfony2框架创建项目与模板设置实例详解

    这篇文章主要介绍了Symfony2框架创建项目与模板设置的方法,结合实例形式详细分析了Symfony2框架的具体步骤与详细实现代码,需要的朋友可以参考下

  10. 使用symfony命令创建项目的方法

    这篇文章主要介绍了使用symfony命令创建项目的方法,结合实例形式分析了Symfony命令的使用方法与项目创建的相关技巧,需要的朋友可以参考下

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部