我想知道是否有可能在实体和价值对象之间建立关系,或者第三个实体是否必须作为关系目标。目的可能是使用具有自己业务逻辑的公共数据结构标记不同类型的实体。有什么想法吗?
更新:
假设我有一个业务对象来模拟SCAP CPE命名:
$(document).ready(function(){
if(isEDGE()) {
$('a').attr('download','download');
} else {
$('a').attr('target','_blank');
}
})
如果我想以一对多的方式用这个VO标记不同类型的实体,我可以想到两种不同的方式:
所以我想知道是否只有第二个选项可用,或者第一个选项是否可以某种方式实现。
答案 0 :(得分:2)
你应该使用custom mapping type来做这样的事情。例如,它看起来像这样:
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform
class Cpe22Type extends Type
{
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getVarcharTypeDeclarationSQL(array('length' => 250));
}
public function convertToPHPVale($value, AbstractPlatform $platform)
{
return new Cpe22($value);
}
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return (string) $value;
}
public function getName()
{
return 'cpe22';
}
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}
}
显然,您必须在__toString()
课程中添加Cpe22
方法才能实现此目的。
在注册类型后(如何执行此操作取决于您的框架,例如在{emmony} {}}),您只需将字段映射为cpe22
类型:
/**
* @ORM\Column(name="my_cpe", type="cpe22")
*/
public $myCpe;