就在对这个问题的情况下,别人的土地(像我一样):
拉入请求@Florian提到的把它做成主义了。虽然文档似乎仍然缺乏任何关于ID生成器策略的信息。只有部分我发现IdGenerator的CUSTOM
选项在GeneratedValue描述中。如果我错过了,请在评论中纠正我。
坚韧它可以很容易地实施。只需创建扩展Doctrine\ORM\Id\AbstractIdGenerator\AbstractIdGenerator
一类:
namespace My\Namespace;
use Doctrine\ORM\Id\AbstractIdGenerator;
class MyIdGenerator extends AbstractIdGenerator
{
public function generate(\Doctrine\ORM\EntityManager $em, $entity)
{
// Create id here
$id = <do some logic>;
return $id;
}
}
然后将其添加到教义实体配置您的id
描述(YAML
为例):
My\Bundle\Entity\MyEntity:
type: entity
id:
id:
type: bigint
unique: true
generator:
strategy: CUSTOM
customIdGenerator:
class: 'My\Namespace\MyIdGenerator'
fields:
otherField: ....
如果使用Annotations
,而不是YAML的,实体的配置应该看起来像这样(未经测试):
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="CUSTOM")
* @CustomIdGenerator(class="My\Namespace\MyIdGenerator")
*/
public $id;
这就是所有;)
该文章建议修改核心文件:-S – zerkms 2012-02-03 20:26:12
是的。如果不修改核心原则文件,这是不可能的,直到合并PR#206。 – Florian 2012-02-04 13:08:44
即使这不是一个好主意,你仍然可以维护自己的分支。但更糟糕的想法是混合标识符生成。 – Florian 2012-02-04 13:14:12