在没有刷新或setId()的情况下进行测试时,在Doctrine2-Entity中设置显式Id

时间:2015-02-25 16:51:13

标签: doctrine-orm

我使用实体

id:
    id:
        type: string
        length: 36
        id: true
        generator:
            strategy: UUID

所以我没有 setId() -Method。在测试时,这是我创建实体的方式:

$person = new Person();
$person->setFirsname('Foo');
...
$manager->persit($person);
// no flush

我试过

$metadata = $manager->getClassMetaData('Acme\Entities\Person');
$metadata->setIdGenerator(new AssignedGenerator());

$person = new Person();
....

但是它说它缺少一个已分配的ID,但我不能在没有 setId()的情况下设置它(我不想在我的实体中使用 setId() )。

1 个答案:

答案 0 :(得分:0)

我用Generators实验了一下,并尝试了这个:

...
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Id\AbstractIdGenerator;

class AutoIncGenerator extends AbstractIdGenerator
{

    public $count = 0;

    public function generate(EntityManager $em, $entity)
    {
        $this->count++;
        return $this->count;
    }
}

它完全符合我的需要。每个对象都有一个带有独占号码范围的id(auto inc)。

不需要 flush() setId()