Symfony2 Doctrine: установите параметр для получения запроса с экземпляром clausule - PullRequest
0 голосов
/ 05 января 2012

У меня есть следующий класс с наследованием одной таблицы:

/**
* @ORM\Entity
* @ORM\Entity(repositoryClass="MyProject\MyBundle\Repository\ParameterRepository")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"MidUpperArmCircumference" = "MyProject\MyBundle\Entity\MidUpperArmCircumference", "parameter" = "Parameter"})
*/
class Parameter{
...
}

и я пытаюсь получить экземпляр MidUpperCircumference:

...
$repository = $this->getDoctrine()->getRepository('MyprojectMyBundle:Parameter');
$discr = 'MyProject\MyBundle\Entity\MidUpperArmCircumference';
$midUpper = $repository->findOneByDiscr($discr);

и у меня тоже есть:

//MyProject\MyBundle\Repository\ParameterRepository

...
public function findOneByDiscr($discr)
{

    $query = $this->getEntityManager()
    ->createQuery(
            'SELECT u FROM MyProjectMyBundle:Parameter u 
            WHERE u INSTANCE OF :entity ')
            ->setParameter('entity', $discr);


    try {
        return $query->getSingleResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }

}

И я получил эту ошибку:

Предупреждение: get_class () ожидает, что параметр 1 будет объектом, строка указана в строке D: \ workspace \ Project \ Symfony2 \ vendor \ doctrine \ lib \ Doctrine \ ORM \ Query \ SqlWalker.php 1727

Ответы [ 2 ]

0 голосов
/ 08 марта 2016

Вы также можете попробовать установить тип данных вашего параметра (сущности), например:

    ->setParameter('entity', $discr, \Doctrine\DBAL\Types\Type::OBJECT);
0 голосов
/ 23 мая 2014

Чтобы получить экземпляр объекта MidUpperCircumference , вам необходимо:

<?php
use MyProject\MyBundle\Entity\MidUpperArmCircumference

...
$repository = $this->getDoctrine()->getRepository('MyprojectMyBundle:Parameter');
$discr = new MidUpperCircumference();
$midUpper = $repository->findOneByDiscr($discr);
...
...