Używanie symfony2/doctrine2, Trudno mi zdefiniować indeks dla mojego zapytania.Doctrine QueryBuilder indexBy na złączonej klasie - p jest już zdefiniowany Błąd
Mój kod:
$queryBuilder = $this->_em
->createQueryBuilder()
->select('u, uis, cost, p, stock')
->from('AppBundle:FoodAnalytics\UserIngredient', '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)
;
pojawia się następujący błąd:
[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, uis, cost, p, stock FROM AppBundle:FoodAnalytics\UserIngredient 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 +
Korzystanie u.product
pojawia się następujący błąd:
[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 »
używając tylko product
, pojawia się następujący Błąd:
[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 »
Działa dobrze, jeśli używam u.id
Czy mogę używać indeksu tylko z pola z tej samej tabeli?
Co mogę zrobić, aby działało?
Thansk dużo!
EDIT:
Jako tymczasowy fix używam:
$result = $queryBuilder->getQuery()->getResult();
$result = array_combine(array_map(function(UserIngredient $userIngredient){
return $userIngredient->getProduct()->getId();
}, $result), $result);
return $result;
Nie jestem pewien, czy można indeksować jednostkę przy użyciu pola z podmiotu powiązanego. –
Mogę być całkowicie błędny, ale możesz spróbować indeksować według 'product.id' zamiast' p.id'. Ponadto: http://www.doctrine-project.org/jira/browse/DDC-1180 –
ok, product.id nie działa. Twoje odwołanie sugeruje jednak, że poprawka została zaimplementowana, ale nie znalazłem jeszcze odpowiedniego rozwiązania. Czy ty? –