doctrine2-使用自定义查询getter
我用的是Symfony2和Doctrine2。如何使用不同的查询来获取方法?(措辞拙劣,让我解释一下) i、 我有一个应用实体,它与版本有一对多的关系 因此,在我的应用程序实体中,我有: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; } 这一切都很好,但是,如何
/**
* 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方法?谢谢你的帮助:-)这是最大的问题。。。。。。