php - 使用联接时 Doctrine 查询生成器错误

标签 php mysql doctrine-orm doctrine symfony

在摄影大赛中,有一个具有“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'

但是删除 orderBy 后我得到了这个结果

Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got end of string.

我知道该错误与我没有在连接内使用 WITH 参数有关,但希望它能 100% 良好地工作,并使其完全通过 Doctrine 关系.

问题可能出在哪里以及如何解决?

最佳答案

我认为这是因为在您的实体中,您的 imageId 字段在 Doctrine 中定义了两次:

@ORM\Column(type="integer", name="image_id")

@ORM\JoinColumn(name="image_id", referencedColumnName="id")

您必须删除第一个(@ORM\Column),因为它是连接关系。

另外,您必须这样定义它:

/**
 * @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');

关于php - 使用联接时 Doctrine 查询生成器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399511/

相关文章:

php - Doctrine ManyToMany 优化许多查询

mysql - 如何设计 Doctrine 2 实体

php - MySQL 跨表查询连接

php - 将 JSON 对象附加到 URL 末尾

更新中的 MySQL Join 子句

doctrine-orm - symfony2 : unable to save parent id in embedded object

php - 无法在 Ubuntu 上使用 PHP 和 ODBC 连接到 SQL Anywhere 12

javascript - 如何在给定的日期时间运行 javascript 函数

XAMPP 中的 mySQL 服务器无法启动

mysql - 对 MySQL 数据库进行动态 SQL 查询