doctrine2-使用自定义查询getter

doctrine2-使用自定义查询getter,doctrine,doctrine-orm,symfony,Doctrine,Doctrine Orm,Symfony,我用的是Symfony2和Doctrine2。如何使用不同的查询来获取方法?(措辞拙劣,让我解释一下) i、 我有一个应用实体,它与版本有一对多的关系 因此,在我的应用程序实体中,我有: /** * Get versions * * @return Doctrine\Common\Collections\Collection */ public function getVersions() { return $this->versions; } 这一切都很好,但是,如何

我用的是Symfony2和Doctrine2。如何使用不同的查询来获取方法?(措辞拙劣,让我解释一下)

i、 我有一个应用实体,它与版本有一对多的关系

因此,在我的应用程序实体中,我有:

/**
 * Get versions
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getVersions()
{
    return $this->versions;
}
这一切都很好,但是,如何实现一个方法,例如

getCurrentVersion,其中我执行一个简单的查询,例如:

SELECT v.* FROM version WHERE application_id = 1 AND current = 1
因此,在细枝模板中,我可以:

{% for application in applications %}
   Name : {{ application.name }}
   Current Version: {{ application.getCurrentVersion }}
{% endfor %}
非常感谢您的帮助

p、 如果我做错了,请告诉我

谢谢

编辑:真的

编辑,我真的不想这样做,这是不必要的,也是资源上的浪费:

public function getCurrentVersion
{
   foreach($this->versions as $version)
   {
      if($version->current)
      {
        return $version;
      }

   }
}

首先,您不应该从实体中接触数据库。将实体管理器注入到托管实体中被认为是不好的做法,否则它无法了解数据层

要执行您所要求的操作,您可以使用带有getCurrentVersion方法的,该方法获取实体的id或实例并对其运行查询:

// class Foo\Bundle\Repository\BarRepository
public function getCurrentVersion(MyClass $class)
{
    $dql = 'SELECT v FROM Namespace\Of\Version\Class v WHERE v.application_id=:id AND current=1';
    $query = $this->_em->createQuery($dql);
    $query->setParameter('id', $class->getId());
    $version = $query->execute();

    return $version;
}
注意,如果您只需要一个版本,那么可以使用
$query->getSingleResult()
而不是
$query->execute()

但是,听起来您好像在尝试对某些类进行版本控制/历史记录,在这种情况下,您应该查看和关联的;具体地说,看看Loggable行为扩展,它透明地处理实体的版本控制。

看看


我相信这就是您一直在寻找的。

您好,我没有尝试进行任何版本控制。这只是我正在使用的一个简单的布尔字段,我还可以使用getLatestFiveVersions等。我知道可以这样做,但如何在我的小树枝模板(如application.getCurrentVersion)中使用entity repository方法?谢谢你的帮助:-)这是最大的问题。。。。。。