【问题标题】:Symfony 2 object with array of objects, how to access them?带有对象数组的 Symfony 2 对象,如何访问它们?
【发布时间】:2014-04-26 18:47:53
【问题描述】:

我有 3 个 Symfony2 实体,它们以下列方式相关:

  1. 带有车牌号、品牌、型号的车辆。此外,车辆还有许多工作和燃料购买
  2. Job 有一种方法可以给出作业的总距离(在作业开始时使用里程表,在作业结束时使用里程表。
  3. Fuel Purchase 有升、燃料价格和成本方法。

想要呈现一个表格报告,其中包含基于一段时间的车牌号、总距离、总燃料、燃料成本、公里/升、总工作量。 还想对执行所有这些操作的数据库进行传统查询,我发布了this 问题。你可以在那里看到一些实际的物体。但如果我没记错的话,Symfony2 的理念是使用具有所有这些对象的车辆对象来执行此操作。您认为最好的方法是什么? 只是我无法设法在对象数组中上下移动。我试过这个:

class ReportsController extends Controller
{
    public function renderAction(Request $request)
    {
        $vehicles = $this->getDoctrine()
            ->getRepository('TeamERPTransportBundle:Vehicle')->findAll();
        $countVehicles = 0;
        $countJobsXVehicle = array();
        foreach ($vehicles as $vehicle)
        {            
            $VehicleJobs = $vehicle->getJobs();
            $countJobsXVehicle[$countVehicles] = 0;
            $countVehicles++;
            //This piece of code gives the error
            foreach ($VehicleJobs as $VehicleJob)
            {
               $countJobsXVehicle[$countVehicles]++;
            }
            //I am planing to do the same for Fuel purchase
            //$VehicleRefuels = $vehicle->getFuelPurchaces();
            //foreach ($VehicleRefuels)
        }
    }
}

有了这个我得到这个错误: ContextErrorException: Notice: Undefined index: vehicles in D:\Web\wamp\www\team\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 1753

如何让它发挥作用? 感谢您的帮助!

编辑: 我也试过这个:

class ReportsController extends Controller
{
public function renderAction(Request $request)
{
    $vehicles = $this->getDoctrine()->getRepository('TeamERPTransportBundle:Vehicle')->findAll();

    $countVehicles = 0;
    $countJobsXVehicle[] = 0;

            foreach ($vehicles as $vehicle)
            {     
                    $VehicleJobs  = new ArrayCollection();
                    $VehicleJobs[]  = $vehicle->getJobs();
                    $countJobsXVehicle[$countVehicles] = $this->VehicleJobs($VehicleJobs);          
                    //$VehicleRefuels = $vehicle->getFuelPurchaces();
                    //foreach ($VehicleRefuels)
                    $countVehicles++;                        
            }

}
    return $this->render('TeamERPTransportBundle:Transport:report.html.twig', array('vehicles' => $vehicles,
        'countJobsXVehicle' => $countJobsXVehicle,
        'countVehicles' => $countVehicles,
        'render' => $graph));
}
private function VehicleJobs (ArrayCollection $VehicleJobs){
    $countJobsXVehicle = 0;
    foreach ($VehicleJobs as $VehicleJob)
    {
        $countJobsXVehicle++;
        //var_dump($VehicleJob);
    }  
    return $countJobsXVehicle;
}
}

它可以工作,但它的行为方式与预期不同。 实体类是here

【问题讨论】:

  • 我在您的代码中没有看到任何调用vehicles 索引的数组。您确定问题中的代码是第 1753 行的代码吗?
  • @n.1 我真的不明白你的意思,也许是因为我太笨了。查看问题的版本。
  • 我想知道为什么错误消息提到vehicles,而没有这个名称的变量。

标签: php mysql symfony object doctrine-orm


【解决方案1】:

我会在 VehicleRepository 中创建这些总计函数,用于查询作业/totalFuel/ 和 totalDistance 部分(参见学说的部分here)并返回一个数组结果getArrayResult,然后我会使用 foreach 车辆做一个简单的数组计数就像你在上面做的那样。然后执行您的 findAll 结果,返回连接对象 Vechicle 等——将所有这些传递给您的模板。 让我们更多地了解您正在寻找的这些总数,我可以更具体。

【讨论】:

  • 您可以发布您的模板吗?我就您的链接问题向您的fuelPurchace 实体协会提出了质疑。
  • 谢谢我已经用this的方法整理出来了。最后,问题不在于我的查询方法,而在于我的实体。
猜你喜欢
  • 1970-01-01
  • 2021-02-19
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多