我尝试从表格中抓取一些数据,只要我不使用
->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 :(得分:1)
一些事情。首先,不清楚$this->clientId
引用了什么,但是如果你试图引用与SanitationType对象关联的客户端对象的id,那么你需要有一个公共getClient()
方法客户端类上的SanitationType类和getId()
方法。因此,从SanitationType对象$sanitationType
获取客户端ID然后变为:
$sanitationType->getClient()->getId()
其次,SanitationType类中没有client_id
属性。 Doctrine在您定义类时会看到类的属性。因此,在这种情况下,要通过客户端关联的id在数据库中查找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();