我有一个奇怪的Symfony/Doctrine错误。 我的实体结构是这样的存储库方法并不总是给出预期的结果
class ClassA {
/**
* @ORM\ManyToOne(targetEntity="My\CoreBundle\Entity\ClassB", inversedBy="classAs", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $classB;
}
class ClassB {
/**
* @ORM\OneToMany(targetEntity="My\CoreBundle\Entity\ClassA", mappedBy="classB", cascade={"persist", "remove"})
*/
private $classAs;
/**
* @ORM\ManyToOne(targetEntity="My\CoreBundle\Entity\ClassC", inversedBy="classBs")
* @ORM\JoinColumn(nullable=false)
*/
private $classC;
}
class ClassC {
/**
* Inverse Side
* @ORM\OneToMany(targetEntity="My\CoreBundle\Entity\ClassB", mappedBy="classC", cascade={"persist", "remove"})
*/
private $classBs;
/**
* Inverse Side
* @ORM\OneToMany(targetEntity="My\CoreBundle\Entity\ClassD", mappedBy="classCs", cascade={"persist", "remove"})
*/
private $classDs;
}
class ClassD {
/**
* @ORM\ManyToOne(targetEntity="My\CoreBundle\Entity\ClassC", inversedBy="classDs")
* @ORM\JoinColumn(nullable=false)
*/
private $classC;
}
我知道,在ClassA的(ID = 566208)连接到D类(ID = 16286)的数据库。
我在ClassARepository中有这个非常简单的方法。
class ClassARepository extends EntityRepository
{
public function myMethod()
{
$builder = $this->createQueryBuilder('classA');
$query = $builder->getQuery();
$classAs = $query->getResult();
echo "<pre>";
foreach ($classAs as $classA) {
if ($classA->getId() == 566208)
{
echo "classA 566208\n";
$classDs = $classA->getClassB()->getClassC()->getClassDs();
$found = false;
foreach ($classDs as $classD) {
if (16286 == $classD->getId()) {
$found = true;
echo "INFO 16286 found\n";
}
}
if (false == $found) echo "ERROR 16286 Not found\n";
}
}
echo "</pre>";
}
}
当我调用此方法在控制器中没有问题
class MyController
{
public function indexAction()
{
$this->getRepository('MyCoreBundle:ClassA')->myMethod();
// [...]
}
}
结果是
classA 566208
INFO 16286 found
但在码的其他部分
class MyService
{
private function myServiceMethod()
{
$this->doctrine->getManager()
->getRepository('MyCoreBundle:ClassA')->myMethod();
}
}
结果是
classA 566208
ERROR 16286 Not found
这是什么原因造成的?我有点困惑,不知道我的教义是否可靠。
我的配置 “PHP”: “> = 5.5”, “的symfony/symfony中”: “2.8 *”, “学说/ ORM”: “〜2.5”,
我做了mysqlcheck的一切似乎都好。
编辑/ TLDR:
此代码...
echo "<pre>";
echo "NORMAL\n";
$classC = $this->doctrine->getManager()->getRepository('MyCoreBundle:ClassC')->find(7);
$classDs = $classC->getClassDs();
$found = false;
foreach ($classDs as $classD) {
if (16286 == $classD->getId()) {
$found = true;
echo "INFO 16286 found\n";
}
}
if (false == $found) echo "ERROR 16286 Not found\n";
echo "INVERSED\n";
$classDs = $this->doctrine->getManager()->getRepository('MyCoreBundle:ClassD')->findBy(array("classC" => 7));
$found = false;
foreach ($classDs as $classD) {
if (16286 == $classD->getId()) {
$found = true;
echo "INFO 16286 found\n";
}
}
if (false == $found) echo "ERROR 16286 Not found\n";
echo "</pre>";
...给...
NORMAL
ERROR 16286 Not found
INVERSED
INFO 16286 found
不,我需要在所有ClassA的对象循环,但我找到了失踪了这个特定的ID 566208。我不知道其他对象是否有同样的问题。 – moins52
2个方法调用之间没有任何变化。 – moins52