2

次のような Entity クラスがあります。

<?php

namespace Entities;

/** @Entity @Table(name="User") */
class User
{
    /**
     * @Id
     * @Column(type="string", length=12)
     */
    private $no;

Doctrine 2 Identifier Generation Strategy セクションに基づく:

NONE: コードによって識別子が割り当てられている (したがって生成されている) ことを Doctrine に伝えます。新しいエンティティが EntityManager#persist に渡される前に、割り当てを行う必要があります。NONE は @GeneratedValue を完全に除外することと同じです。

つまり、persist を呼び出す前に値を設定できる方法が必要です。

呼び出し./doctrine orm:generate-entitiesてもセッター関数は生成されません。クラスに手動で記述する必要がありますか?

/**
 * Set no
 *
 * @param string $no
 */
public function setNo($no)
{
    $this->no = $no;
}

これは正しい方法ですか?

4

1 に答える 1

3

これを行う「正しい」方法はありません。Generate-entities コマンドは単なるヘルパーです。あなたが使用しなければならないものは何もありません。好きなようにできます。

割り当てられた戦略の唯一の要件は、$em->persist() が呼び出されたときに id フィールドが非 null でなければならないことです。

たとえば、割り当てられた ID の場合、コンストラクターで必須パラメーターにすることは理にかなっています。

class User
{
    private $no;
    public function __construct($no)
    {
        $this->no = $no;
    }
}
于 2010-11-27T19:11:32.927 に答える