包含没有表的其他实体的实体

Ars*_*ham 5 orm symfony doctrine-orm

我有一个实体(发票),纯粹用于计算目的,没有表格,与表格有关系的其他两个实体相关联.(虽然有太多其他实体参与其中).

class Row{
    /**
     * @var integer
     *
     * @ORM\Column(name="row_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="File")
     * @ORM\JoinColumn(name="file_id", referencedColumnName="file_id")
     */
    protected $file;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="date")
     */
    private $date;

}

class File
{
    /**
     * @var integer
     *
     * @ORM\Column(name="file_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;


}


class Invoice
{
    /**
     * @ORM\Id
     * @ORM\Column(name="invoice_id", type="integer")
     * @ORM\GeneratedValue
     */
    protected $id = null;

    /**
     * @ORM\OneToMany(targetEntity="Row", mappedBy="row_id")
     */
    protected $row;

    /**
     * @ORM\OneToMany(targetEntity="File", mappedBy="file_id")
     */
    protected $file;

}
Run Code Online (Sandbox Code Playgroud)

我希望能够查询发票:

$sDate = //Some date
$this->getEntityManager()
     ->createQuery("SELECT Invoice, Row, File
                        FROM
                            ReportsEntitiesBundle:Invoice Invoice
                        LEFT JOIN
                            Row.row Row
                        LEFT JOIN
                            Row.file File
                    WHERE date=:date"
                  )
 ->setParaMeter(':date', $sDate)
 ->setFirstResult($iPage*$iLimit)
 ->setMaxResults($iLimit)
 ->getResult();
Run Code Online (Sandbox Code Playgroud)

问题:#Distrine尝试查询数据库,如何防止这种情况并让它找到相关的实体?#如何将日期(在Row实体中,不能在Invoice中)与查询相关联?

之后,此发票将成为另一个用于计算/搜索目的的大实体的一部分.

谢谢

Man*_*eUK 7

简答:你不能

长答案:你不能,因为带@ORM注释的实体意味着它持久存储到数据库 - 查询该实体与查询数据库表有关.为什么不创建表?!?!?

你需要的地方坚持之间的关联filerow-数据库表是一个完美的地方!!!!

更新

只是为了澄清......实体只是一个标准类 - 它具有属性和方法......就像任何其他类一样 - 当您发出基于学说的命令时,它使用实体中的注释来配置表/列/关系等如果删除那些你可以使用它,但你喜欢...但你需要填充值来使用它,你将无法在Doctrine查询中使用它,它显然不会被持久化!