我正在使用Symfony2和Doctrine2。我如何为get方法使用不同的查询? (措辞不好,让我解释一下)
即。我有一个应用程序实体,它与Version
有一对多的关系所以在我的应用程序实体中我有:
/**
* 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.S。如果我错了,请赐教。
感谢。
编辑,我真的不想这样做,这是不必要的,而且非常浪费:public function getCurrentVersion
{
foreach($this->versions as $version)
{
if($version->current)
{
return $version;
}
}
}
答案 0 :(得分:5)
我相信这就是你一直在寻找的东西。
答案 1 :(得分:2)
首先,您不应该从您的实体触摸数据库。将实体管理器注入管理实体被认为是不好的做法,否则无法知道数据层。
要执行您要求的操作,您可以使用带有getCurrentVersion方法的custom entity repository,该方法接受实体的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();
但是,听起来您正在尝试对某些课程进行版本控制/历史记录,在这种情况下,您应该查看Gedmo DoctrineExtensions和相关的Symfony2 bundle;具体来说,请查看Loggable行为扩展,它可以透明地处理实体的版本控制。