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中)与查询相关联?
之后,此发票将成为另一个用于计算/搜索目的的大实体的一部分.
谢谢
简答:你不能
长答案:你不能,因为带@ORM注释的实体意味着它持久存储到数据库 - 查询该实体与查询数据库表有关.为什么不创建表?!?!?
你需要的地方坚持之间的关联file和row-数据库表是一个完美的地方!!!!
只是为了澄清......实体只是一个标准类 - 它具有属性和方法......就像任何其他类一样 - 当您发出基于学说的命令时,它使用实体中的注释来配置表/列/关系等如果删除那些你可以使用它,但你喜欢...但你需要填充值来使用它,你将无法在Doctrine查询中使用它,它显然不会被持久化!