如何过滤Doctrine Entity对象?

时间:2017-03-27 04:56:22

标签: php doctrine-orm doctrine doctrine-query

所以我有这样的数据库设置。

enter image description here

电话号码属于分组。用户也属于分组。我试图找出如何获得属于分组的所有用户,但是如果可能的话,通过实体对象而不仅仅是查询。

例如,我知道我可以像这样进行查询...

<?php

/**
 * Auto generated by MySQL Workbench Schema Exporter.
 * Version 3.0.3 (doctrine2-annotation) on 2017-03-27 04:09:37.
 * Goto https://github.com/johmue/mysql-workbench-schema-exporter for more
 * information.
 */

namespace Entity;

use Doctrine\ORM\Mapping as ORM;
use Entity\BaseGrouping;

/**
 * Entity\Grouping
 *
 * @ORM\Entity()
 */
class Grouping extends BaseGrouping
{
    public function getUsersByPriority(){
        global $entityManager;

        $users = $entityManager->getRepository('Entity\User')->findBy(array(),array('priority' => 'ASC'));

        return $users;
    }
}

稍加修改后我可以添加另一个过滤器,以便只显示与该组相关的正确结果而不是所有内容。现在,这将导致只显示每个用户,而不是那些只属于该组的用户。

我正在寻找的东西是这样的......

$results = $entityManager->getRepository('entity\Phonenumber')->findBy(array('number' => '+'.$numberCalled));

            if(count($results)<=0 || count($results)>1){
                sendEmail('Error Occured', 'There was duplicate phone numbers in the database, used fallbacknumber<br/><br/>'.print_r($_REQUEST,true),"joe@poolserviceusa.com");
                return $fallbacknumber;
            }else{
                $phonenumber = $results[0];
                $group = $phonenumber->getGrouping(); //@JA - Returns the group object and stores it to variable group in scope
            }

            //Get list of all users in the group
            $users = $group->getUsersByPriority(); //@JA - Returns all users associated with the group

            //Find the first active and not busy user
            foreach($users as $user){
                echo '<test>'.$user->getUserName().'<test>';
            }

由于我正确地映射了所有学说类,我只能说$ phonenumber-&gt; getGroupings();它只返回属于那个完美的语音的分组!

但我现在需要的是属于该特定群组的所有用户?

如果我们这样做很容易$group->getUsers();这里的问题是我需要按优先级排序的用户,并且在使用这些默认方法时没有排序。

在按优先级排序时,如何让的所有用户

1 个答案:

答案 0 :(得分:0)

我想我找到了答案,但我不知道这是否是最好的答案。我将函数getUsersByPriority修改为此。

public function getUsersByPriority(){
        global $entityManager;

        $grouping_id = $this->getId();

        $users = $entityManager->getRepository('Entity\User')->findBy(array('grouping_id' => $grouping_id),array('priority' => 'ASC'));

        //@JA - Get reference to the users of just this grouping.
        $users = $this->users;

        return $users;
    }

我没有意识到我可以使用$ this-&gt; getId();在这种情况下获得对当前实例的引用。