не может получить объект результата в доктрине
Я получил DQL:
$sql =$qb->select('login,id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login',$login);
$rs = $sql->getQuery()->getResult();
Я хочу, чтобы результат возвращался как объект с двумя свойствами: Login, id. В любом случае я могу это сделать? Я попробовал CustomHydrator
но это не сработает. это мой CustomHydrator:
namespace Hydrator;
use Doctrine\ORM\Internal\Hydration\AbstractHydrator;
class CustomHydrator extends AbstractHydrator
{
protected function hydrateAllData()
{
return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
Затем я добавил $em->getConfiguration()->addCustomHydrationMode('CustomHydrator', 'Hydrator\CustomHydrator');
и запустить: $rs = $sql->getQuery()->getResult('CustomHydrator');
Есть несколько способов сделать это. Если это запрос, который вам нужно повторно использовать, то, возможно, лучший подход - это устные гидраторы Doctrine. Если нет, вы можете просто передать результат объекту.
Если вам нужен один результат:
$sql =$qb->select('c.login, c.id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login', $login);
$rs = (object) $sql->getQuery()->getSingleResult();
Если вам нужно вернуть массив объектов (т.е. Несколько элементов результата), вы можете просто привести каждый результат:
$sql =$qb->select('c.login, c.id')
->from('Cusomter','c')
->where('c.login = :login')
->setParameter('login', $login);
$rs_new = array_map(function ($value) {
return (object) $value;
}, $sql->getQuery()->getResult());
Лучший способ использования Entity в качестве результата http://symfony.com/doc/current/doctrine.html#creating-an-entity-class
Насколько я понимаю, вам нужен только один результат, поэтому используйте следующий код внутри репозитория:
$ rs = $this-> findOneBy (['login' => $ login]);