Witam! Piszę sobie aplikację w symfony, ale mam problem z napisaniem jak dla mnie nieco złożonego zapytania w repozytorium encji. Po uruchomieniu app_dev.php pojawia się błąd:
Error: Method Doctrine\Common\Collections\ArrayCollection::__toString() must not throw an exception, caught Symfony\Component\Debug\Exception\ContextErrorException: Catchable Fatal Error: Object of class Doctrine\ORM\EntityManager could not be converted to string
Mój kod tej klasy to:
<?php
namespace NewsBundle\Repository;
class NewsRepository extends \Doctrine\ORM\EntityRepository {
public function getQueryBuilder(array $params = array()){
$qb = $this->createQueryBuilder('n')
->select('n, q, p')
->leftJoin('n.followers', 'q')
->leftJoin('n.page', 'p');
if(!empty($params['orderBy'])){
$orderDir = !empty($params['orderDir']) ? $params['orderDir'] : NULL;
$qb->orderBy($params['orderBy'], $orderDir);
}
if(!empty($params['userId'])){
$qb -> Where( $qb->expr()->in('n.pageId', $qb->Select('u.pages')->from('users', 'u')->Where('n.followers = :useriId')))
->setParameter('userId',$params['userId'] );
}
return $qb;
}
}
Używam Symfony 3.1.2. Niestety nie mam zbytniego doświadczenia z tym narzędziem. Napisałem jednak zapytanie sql które działa, ale knp_paginator którego używam nie wspiera SQLa podobno.
SELECT n.* FROM news AS n, user_pages as u WHERE n.page_id IN (SELECT u.page_id FROM user_pages WHERE u.user_id = 4)
*zamiast 4 powinno się wstawić userId