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.