関連エンティティをフェッチしません、私はそれがどのように見えるか、ここに、symfonyのドキュメントからの例でそれを再現しましたProductクラス教義OneToManyの関係は、私はこのケースで立ち往生しています
/**
* @ORM\Entity
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
public function __construct($category)
{
$this->category = $category;
}
public function id()
{
return $this->id;
}
public function category()
{
return $this->category;
}
}
TEST
今、私はカテゴリーをフェッチし、その製品を入手できるようにしたいテストコードのこのスニペットを持っている:私は取得しています何
$cat = new Category();
$prod = new Product($cat);
$this->entityManager->persist($prod);
$this->entityManager->persist($cat);
$this->entityManager->flush();
$crepo = $this->getEntityManager()->getRepository(Category::class);
$c = $crepo->findAll()[0];
var_dump(get_class($c->products()), $c->products()->count())
が期待されているクラスPersistentCollection
の製品ですが、カウントが0 1製品が必要です。
データベースに適切な外部キーが設定された適切なカテゴリと製品レコードがあることがわかります。
回避策
私は製品にPersistentCollection
をデバッグしていますし、そのフラグが初期化= trueに設定されていることがわかります。これで、私はそれはず、それがどのように動作するかを
$c->products()->setInitialized(false);
$c->products()->initialize();
を呼び出すことによって、しかし、この私の知る限りで動作するように、これを強制することはできませんされていますか?
Doctrineが 'new Product'のコンストラクタを使用すると思われますが、Doctrineでは呼び出されません。http:// docs .doctrine-project.org/projects/doctrine-orm/en/latest/reference/architecture.html#エンティティ – LBA
なぜカスケードを使用しないのですか? [カスケードを理解することは、教義の中で継続する](http://www.inanzzz.com/index.php/post/hry2/understanding-the-cascade-persist-operations-in-doctrine) – BentCoder
応答に感謝します。これらが原因です。 Doctrineがコンストラクタを呼び出して作業を保存するとは期待していないので、カスケードの持続性は関連しないものです。私は何が原因であるのかを突き止め、投稿して答えました –