Hi All,

I'm facing some troubles when filtering an entity association 
(ArrayCollection) by using Criteria.

The scenario is the following: I have 3 entities:

class Level
{
   ...
   /**
     * @ORM\ManyToMany(targetEntity="Agent")
     * @ORM\JoinTable(name="level_agent",
     *        joinColumns={@ORM\JoinColumn(name="level_id", 
referencedColumnName="id")},
     *        inverseJoinColumns={@ORM\JoinColumn(name="agent_id", 
referencedColumnName="user_id")}
     *    )
     * @var \Doctrine\Common\Collections\ArrayCollection
     */
   private $agents;

   public function __construct() {
      $this->agents = new ArrayCollection();
   }

   public function getAgents() {
      $criteria = Criteria::create()
        ->where(Criteria::expr()->isNull("user.deleteDate"))
        ->orderBy(array("user.name" => Criteria::ASC));

        return $this->agents->matching($criteria);
   }
   ...
}

class Agent
{
   /**
     *
     * @ORM\OneToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     * @var User
     */
   protected $user;

   /**
     *
     * @return User
     */
    public function getUser() {
        return $this->user;
    }
   ...
}

class User
{
   /**
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\GeneratedValue(strategy="AUTO")
     * @var integer
     */
    private $id;

   /**
     *
     * @return int
     */
    public function getId() {
        return $this->id;
    }

    ...

}


In DB, the "agent" table has a field called "user_id", that is a foreign 
key that references table "user". The relationship between "level" and 
"agent" occurs through "level_agent" - a n:m relationship.

The problem is that whenever the getAgents() method (Level entity) is 
invoked, the list of associated agents is returned, however if I try to 
retrieve the respective user of any agent, 
it is NULL.

For example:

$agents = $levelEntity->getAgents();

foreach($agents as $agent) {
   $userId = $agent->getUser()->getId(); // This throws an error message 
saying that the result of getUser() is NULL
}


I've checked all related records at DB and everything is OK. So I decided 
to make a test and modify the getAgents() method by removing the filtering 
Criteria:

    public function getAgents() {
      return $this->agents;
   }


By simply doing that, the getUser() method started to return an entity of 
type User (as expected).

Did anyone already face the same problem or know what is going wrong?

Thanks in advance

Diogo

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to