尝试添加虚拟属性以使用JMS在Symfony2中查询结果

时间:2015-12-12 19:36:48

标签: symfony doctrine jmsserializerbundle

我面前有一个简单的任务,但我发现自己几乎无法完成它。 我的模型非常复杂,所以为了具体,我会尝试简化。

我有两个实体,Call和Caller,带有我通过自定义服务访问的实体存储库。我正在使用JMS Serializer Bundle。所有实体都被正确映射,整个过程工作得非常好。但我有这个想法,我不能发生。到了这一步...... 这些是我描述的实体:

--Call--
#call_id
location
date_created
Caller

--Caller--
#caller_id
phone_num

这个想法是列出所有带有字段的呼叫,例如:

New York, 2015.12.12. 20:07:06, Novak Djokovic, 3816976548 [YY]
London, 2015.12.13. 20:07:06, Jelena Jankovic, 3811116333 [XX]

字段YY和XX表示具有该特定号码的数据库中已存在的呼叫数。

我有一个查询返回没有YY和XX值的列表,我还有一个单独的查询返回特定号码的调用数。当我尝试加入它们时,事情就变得复杂了。不知道怎么做。

我读到了有关JMS的VirtualProperty注释,但这次未能真正了解如何使用它(因为从实体访问存储库或服务不是一个好习惯)。

这些是我的方法:

1 - 获取所有呼叫者

的呼叫列表
public function findAllCalls()
    {
        $callerAlias = "c";

        //getAlias method returns the alias of the current entity (call)
        $qb = $this->createQueryBuilder($this->getAlias());
        $qb->leftJoin($this->getAlias() . '.caller', $callerAlias);
        return $qb->getQuery()->getResult();
    }

2 - 根据作为参数的呼叫获取来自特定号码的呼叫数

public function getNumberOfCalls(Call $call) {

        $callerAlias = "c";

        $qb = $this->createQueryBuilder($this->getAlias());
        $qb->leftJoin($this->getAlias() . '.caller', $callerAlias);
        $qb->select("COUNT(" . $this->getAlias() . ".call_id)");
        $qb->where($callerAlias.".phonenbr = ".$call->getPhoneNumber());

        return $qb->getQuery()->getScalarResult();
    }

希望听到你对此的看法,因为我真的很难找到溶剂。

0 个答案:

没有答案