php – Doctrine QueryBuilder indexBy关于加入的类 – p已经定
使用symfony2 / doctrine2,我很难为我的查询定义一个索引.
我的代码: $queryBuilder = $this->_em ->createQueryBuilder() ->select('u,uis,cost,p,stock') ->from('AppBundle:FoodAnalyticsUserIngredient','u','p.id') ->leftJoin('u.product','p') ->leftJoin('u.numberObjects','stock') ->leftJoin('u.userIngredientSuppliers','uis') ->leftJoin('uis.numberObjects','cost') ->where('u.user = ?1') ->setParameter(1,$portfolioUser) ; 我收到以下错误: [Semantical Error] line 0,col 110 near 'p LEFT JOIN u.numberObjects': Error: 'p' is already defined. 500 Internal Server Error - QueryException 1 linked Exception: QueryException ? [1/2] QueryException: SELECT u,stock FROM AppBundle:FoodAnalyticsUserIngredient u INDEX BY p.id LEFT JOIN u.product p LEFT JOIN u.numberObjects stock LEFT JOIN u.userIngredientSuppliers uis LEFT JOIN uis.numberObjects cost WHERE u.user = ?1 + 使用u.product我得到以下错误: [Semantical Error] line 0,col 87 near 'product LEFT': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 500 Internal Server Error - QueryException 1 linked Exception: QueryException ? 使用只是产品,我得到以下错误: [Semantical Error] line 0,col 85 near 'product LEFT': Error: 'product' does not point to a Class. 500 Internal Server Error - QueryException 1 linked Exception: QueryException ? 如果我使用u.id,它可以正常工作 我可以做些什么来使其工作? Thansk很多! 编辑: 作为临时解决方案,我使用: $result = $queryBuilder->getQuery()->getResult(); $result = array_combine(array_map(function(UserIngredient $userIngredient){ return $userIngredient->getProduct()->getId(); },$result),$result); return $result;
属性indexBy仅适用于您当前正在选择的实体(如AFAIK);所以在你的情况下,你只能由u.id索引.
这对我来说是有意义的,因为从其他实体索引真的会弄乱返回的结果.唯一可以得到正确结果的情况是: >主要实体和“目标”indexBy实体的所有加入都是一对一的; 在其他情况下,您在水合过程中会丢失一些实例参考. 在您的示例中,您正在使用LEFT JOIN:所有没有产品的实体会发生什么?全部丢弃,所以LEFT JOIN会让工人像INNER JOIN一样.另外,您的解决方法建议您要组合具有相同索引的实体,但这不是Doctrine如何工作:在Doctrine中,indexBy列必须是唯一的.有关更多信息,请参阅the official docs. 请注意,您可以在JOIN子句中indexBy p.id,但这具有不同的含义.这意味着当保湿UserIngredients实例时,产品的收集应该通过id进行索引. 所以,我的建议是遵循这两个解决方案之一: 放弃原则指标,并使用你的作品; 使用哪一个取决于您的业务逻辑,但我通常更喜欢第二个解决方案,因为第一个生成多级数组,这些数组由实体关系更好地表示. 希望这个帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |