Php 在Symfony中按条件查询相关实体(条令)

Php 在Symfony中按条件查询相关实体(条令),php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,对于这个问题,您需要了解两个实体: 贷款和收费。一笔贷款有多项费用 所以,在我的控制器中,我正在查询每个实体,它看起来很蹩脚 $query = $this->getDoctrine() ->getRepository('AppBundle:Loan') ->find($id); $query1 = $em->createQuery( 'SELECT p FROM AppBundle:Charge p WHERE p.loanId = :loanId AN

对于这个问题,您需要了解两个实体:
贷款和收费。一笔贷款有多项费用
所以,在我的控制器中,我正在查询每个实体,它看起来很蹩脚

$query = $this->getDoctrine()
    ->getRepository('AppBundle:Loan')
    ->find($id);

$query1 = $em->createQuery(
'SELECT p
FROM AppBundle:Charge p
WHERE p.loanId = :loanId
AND p.isActive = true
')->setParameter('loanId', $id);
我想使用关系更好地转换smth中的query1
因此,从我的观点来看,它一定是smth,比如:

    foreach($query->getCharges() as $charge) {
     if($charge->getIsActive() == true) {
      //what to put here?
     }
  }

如果条件通过,我如何从我的第一个代码中获得来自DB的相同对象?

您可以在
贷款
类上创建一个额外的方法,该方法使用
ArrayCollections::filter

public function getActiveCharges()
{
    return $this->getCharges()->filter(function (Charge $charge) {
        return $charge->getIsActive() === true;

        //or you can omit '=== true'
        return $charge->getIsActive();
    });
}

除了我代码中的一个事实,它是有效的。在controller中,我使用$query1=$query->getActiveCharges(),它会返回一个对象,但在我的项目中,在前面的代码中,我使用了“$query1->getArrayResult(),//charges”,在我的计算器类中,我使用它就像使用数组一样。因此,对于新代码,它给了我一个错误“警告:array_column()期望参数1是array,object-given”。有一种方法可以使用新代码转换数组中的对象?使用
$loan->getActiveCharges()->toArray()
。您应该阅读更多关于条令关联的内容,例如
ArrayCollection
类。非常强大的功能。使用`toArray()`方法,它会返回一个对象数组,因此,它不能解决我的问题:(使用我以前的代码,它会返回二维数组,所以如果我只有一个电荷,var_dump会返回我:
数组(9){[“id”]=>int(4)[“date”]=>object(DateTime){[“date”]=>string(26)“2000-01-01 00:00.000000”[“时区类型”]=>int(3)[“时区”]=>string(15)“欧洲/赫尔辛基”}[“值”]=>float(300)[“类型”]=>int(0)[“频率”]=>int(12)[“协议”]=>int(7)[“持续时间”]=>int(20)[“isActive”]=>bool(真)[“isActiveTEG”]=>bool(真)}
但现在它返回了上百行对象和条令关联。是的,您得到了对象。这是因为ORM代表对象关系映射。如果您确实需要,请学习使用对象并序列化。如果您确实讨厌对象,请使用普通SQL并停止使用条令;-)。