使用连接时的原则查询生成器错误
在光电测试中有一个投票具有“imageId”字段的实体。使用连接时的原则查询生成器错误
我想得到一个查询,其中包含投票ID和投票ID携带的图像的文件名。 实体看起来是这样的:
class Vote
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="integer", name="image_id")
* @var integer $imageId
* @ORM\ManyToOne(targetEntity="Image")
* @ORM\JoinColumn(name="image_id", referencedColumnName="id")
*/
protected $imageId;
/**
* @ORM\Column(type="datetime", name="date")
*/
protected $date;
而且图像被链接到这样的:
class Image {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="string", length=255, name="file_name")
* @var string $fileName
*/
protected $fileName;
现在我是想用这个查询器得到的结果出来:
$votes = $qb -> select("v.id, i.fileName, v.date")
->from("AppBundle:Vote", "v")
->join("AppBundle:Image", "i")
->orderBy("v.id", "DESC")
->getQuery();
在此配置中使用它给了我一个错误说:
Expected Literal, got 'BY'
但除去排序依据后,我得到这样的结果
Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got end of string.
我知道,错误链接的事实,我没有使用内加入WITH
PARAM,但想这个工作100%好,并完全通过docrine关系。
Whay可能是问题,我该如何解决它?
我想这是因为在你的实体,您的图像标识字段中学说定义了两次:
@ORM\Column(type="integer", name="image_id")
和
@ORM\JoinColumn(name="image_id", referencedColumnName="id")
您必须删除第一个(@ORM \专栏)因为它是一个连接关系。
另外,你必须是这样定义的:
/**
* @var Image
*
* @ORM\ManyToOne(targetEntity="Image")
* @ORM\JoinColumn(name="image_id")
*/
protected $image;
你不需要不止于此。
而在你VoteRepo:
$qb = $qb = $this->createQueryBuilder('v')
->select('v.id, i.fileName, v.date')
->join('v.image', 'i')
->orderBy('v.id', 'DESC');
这似乎加工。现在在mysql中手动添加元素到数据库进行测试的最佳方式是什么?由于我必须删除我的数据 – aln447
您可以使用以下设备:[http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html](http://symfony.com/doc/current/bundles /DoctrineFixturesBundle/index.html) –
- >加入( 'v.imageId', 'I') – LBA
@LBA'错误:类的appbundle \实体\投票没有协会命名imageId' – aln447