У меня есть небольшая проблема с получением результатов QueryBuilder. Im using Symfony 2.Получить результаты QueryBuilder multiple Joins
Моя проблема в том, что я пытаюсь получить данные из соединения. Отношение это нормально, но когда я пытаюсь получить информацию от B и C и D. Ну ... очевидно, не получается.
Таблицы
Пользователи Многие < -> Многие UsersType Многие < -> Многие CatUsersType Многие < -> Многие Приложения
стол- Пользователи имеет Пользователь
- Приложения имеют Приложения
- CatUsersType имеет тип пользователей для каждого приложения
- UsersType имеет идентификатор пользователя и UserType
Это мой код:
$qb = $em->createQueryBuilder();
$users = $qb->select('a, b, c, d')
->from('MyBundle:users', 'a')
->innerJoin('MyBundle:userstype','b', 'WITH', 'b.iduser = a.id')
->innerJoin('MyBundle:catuserstype','c','WITH', 'c.id = b.idusertype')
->innerJoin('MyBundle:applications','d', 'WITH', 'd.id = c.idapp')
->where('d.id = :app_id')
->setParameter('app_id', $idapp)
->getQuery()
->getResult();
if (count($users) > 0) {
$i = 0;
$elements = array('data' => array());
foreach ($users as $usr) {
$created = $usr->getCreated();//['date'];
if($created instanceof \DateTime){
$created = $created->format('Y-m-d H:i:s');
}
$tmp = [
'username' => $usr->getUsername(),
'name' => $usr->getName() . ' ' .$usr->getLastname(),
'created'=> $created,
'myField'=> $usr->getIdusertype(), //Problems here
'myApp' => $usr->getIdapp(), //And here idApp comes from c or d tables
'id' => $usr->getId()
];
array_push($elements['data'], $tmp);
$i++;
}
$response = $elements;
}
Edit:
Я получил тот же результат, изменяющий внутреннюю сторону налево или справа.
Попытка для вызова метода «getIdusertype» для пользователей класса, когда метод принадлежит классу userstype
Я нашел проблему. Отношения неправильные. Я бы исправил код и поделился правильным кодом. Спасибо всем
Изменить innerJoin to leftJoin и посмотреть, поможет ли это. Мы можем немного доработать вещи. – Cerad
Те же результаты. Попытка вызвать метод «getIdusertype» для пользователей класса, когда метод принадлежит классу userstype – manuerumx
. Я предполагаю, что у вас есть проблемы с отношением и, возможно, запутывают идентификаторы с объектами. Просто используйте find для запроса одного пользователя без объединений. Затем убедитесь, что $ user-> getIdusertype() фактически возвращает объект UsersType. – Cerad