2014-09-08 3 views
1

Я пытаюсь захватить некоторые данные из таблицы, которая работает хорошо, пока я не используюSymfony доктрина getArrayResult ошибка 500

->andwhere('s.client_id = :clientid') 
->setParameter('clientid', $this->clientId) 

Я ж использовать две строку выше, чтобы найти только данные необходимых, Я в конечном итоге к ошибке 500 :(:(

лицо выглядит следующим образом:

class SanitationType 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


/** 
* @ORM\ManyToOne(targetEntity="Pr\UserBundle\Entity\Client") 
* @ORM\JoinColumn(name="client_id", referencedColumnName="id") 
*/ 
private $client; 

/** 
* @ORM\Column(type="string", length=20) 
* @Gedmo\Translatable 
*/ 
private $name; 

/** 
* @ORM\Column(type="string", length=255, nullable=true) 
* @Gedmo\Translatable 
*/ 
private $description; 

/** 
* @ORM\Column(name="`enabled`", type="boolean") 
*/ 
private $enabled; 
    /** 
* @ORM\Column(type="string", length=255, nullable=true) 
*/ 
private $created_by; 
    /** 
* @ORM\Column(type="datetime", nullable=true) 
*/ 
private $created; 

.............. 

и мой сценарий, чтобы захватить данные внутри контроллера выглядит следующим образом:

$query = $em->createQueryBuilder() 
    ->select('s') 
    ->from('PrSensorBundle:SanitationType', 's') 
    ->where('s.enabled = 1') 
    ->andwhere('s.client_id = :client_id') 
    ->setParameter('client_id', $this->clientId) 
    ->orderBy('s.name', 'ASC') 
    ->getQuery(); 
$results=$query->getArrayResult(); 

Я не вижу никакой ошибки, но он не работает вообще :(:(

ли я что-то забыл?

+0

Вы пробовали этот же звонок с помощью 'app_dev.php'? Как насчет журналов ошибок веб-сервера? Вы пробовали обернуть вызов в 'try..catch'? –

ответ

1

Пара вещей. Во-первых, неясно, к чему относится $this->clientId, но если вы пытаетесь ссылаться на идентификатор объекта-клиента, связанного с объектом SanitationType, тогда вам нужно будет иметь общедоступный методдля класса SanitationType и метод getId() на класса клиента. Таким образом, получение идентификатора клиента из объекта SanitationType $sanitationType становится:

$sanitationType->getClient()->getId() 

Во-вторых, нет client_id свойство в классе SanitationType. Doctrine видит свойства класса, как вы их определили. Поэтому в этом случае для поиска объектов (объектов) SanitationType в базе данных по идентификатору ассоциации (-ов) клиента вам необходимо выполнить внутреннее соединение. Ваш конструктор запросов будет выглядеть так:

$query = $em->createQueryBuilder() 
    ->select('s') 
    ->from('PrSensorBundle:SanitationType', 's') 
    ->innerJoin('s.client', 'sc') 
    ->where('s.enabled = 1') 
    ->andwhere('sc.id = :client_id') 
    ->setParameter('client_id', $this->clientId) 
    ->orderBy('s.name', 'ASC') 
    ->getQuery(); 
$results=$query->getArrayResult(); 
+0

OMG, вы правы. На самом деле нет client_id :(Я просто посмотрел в db, нет в сущности. Когда вы используете «клиент» вместо «client_id», он работает хорошо ... Извините за мою небрежность и благодарю вас за вашу помощь. – TheTom

Смежные вопросы