Pat*_*yer 8 php mysql doctrine-orm
基本问题:
是否可以使用Doctrine引用来映射关联,而不是主要但只有唯一键?
扩大的视野:
我有一个实体(Participation),其可引用其他实体2(DropoutCause和DischargeType).根据此组合,基于DropoutScenario数据库中的另一个(第4个)表()隐含了一些其他属性.因为两个引用的实体中的任何一个都可以为null,所以我不能将它们声明为主要但只是第4个表中的唯一键.
问题是当我尝试使用Doctrine映射时,我只会收到错误:
Application\Entity\Trainings\DropoutScenario上缺少主键ID的值
我做错了什么,或者说这是不可能的Doctrine?如果没有,有什么更好的解决方案我怎么能这样做?
我一直在寻找相当长的时间并挖掘了Doctrine文档,但我根本找不到任何关于这个...
我的映射的剥离代码示例如下.
参与:
<?php
namespace Application\Entity\Trainings;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass
*/
abstract class Participation {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
*/
protected $dropoutCause;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
*/
protected $dischargeType;
/**
* @ORM\ManyToOne(targetEntity="DropoutScenario")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="discharge_id"),
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="dropout_cause_id")
* })
*/
private $scenario;
Run Code Online (Sandbox Code Playgroud)
DropoutScenario:
<?php
namespace Application\Entity\Trainings;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="training_dropout_scenarios")
*/
class DropoutScenario {
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DropoutCause")
* @ORM\JoinColumn(name="dropout_cause_id", referencedColumnName="id"))
*/
protected $dropoutCause;
/**
* @ORM\ManyToOne(targetEntity="Application\Entity\DischargeType")
* @ORM\JoinColumn(name="discharge_id", referencedColumnName="id"))
*/
protected $dischargeType;
/** @ORM\Column(type="integer", name="dropout_cause_id") */
protected $dropoutCauseId;
/** @ORM\Column(type="integer", name="discharge_id") */
protected $dischargeTypeId;
Run Code Online (Sandbox Code Playgroud)
由于我没有得到任何答案,我今天做了另一项研究,我通过Doctrine邮件列表论坛找到了我自己的问题的答案.好像我刚搜索了错误的关键词......
不幸的是,学说2不支持它.太遗憾了!:(
来自Doctrine文档:http: //doctrine-orm.readthedocs.org/en/latest/reference/limitations-and-known-issues.html#join-columns-with-non-primary-keys
无法使用指向非主键的连接列.Doctrine会认为这些是主键并使用数据创建延迟加载代理,这可能会导致意外结果.出于性能原因,Doctrine可以在运行时不验证此设置的正确性,而只能通过Validate Schema命令验证.
类似的问题: 对于JoinColumn,是否可以引用"id"以外的列?
| 归档时间: |
|
| 查看次数: |
4557 次 |
| 最近记录: |