我有一組規(guī)范化的實體(偽代碼):User (id, name)Subscription (id, user_id, magazine_id, internal_reference)Magazine (id, name)通常,以標準原則方式創(chuàng)建新訂閱會很容易:// The internal reference is just to emphasize that I have logic inside the constructor that sets an important value$subscription = new Subscription($textThatWillBeMangledToGenerateInternalReference);$subscription->setMagazine($magazine);$subscription->setUser($user);$this->_em->persist($subscription);$this->_em->flush();然而,在我的用例中,我目前有一個實體,但只有1000個UserID。Magazine可能的解決方案:運行類似 .這將是一個相當可怕的解決方法,因為我對這些數(shù)據(jù)沒有欲望,并且它對將要觸發(fā)的查詢沒有任何影響。SELECT * FROM User WHERE id IN (:userIds)->persist創(chuàng)建某種偽實體?也許像那樣使用它。如果這有效(我不確定),這將是可怕的,因為UserID是一個生成值,所以為它添加任何形式的外部設置器將再次成為一個相當可怕的黑客$user = new User($userId);完全跳過學說實體系統(tǒng),并通過PDO將數(shù)據(jù)戳入。這樣做的好處是避免了教義逐個系統(tǒng)相對緩慢的性質(zhì),但這意味著我將跳過訂閱實體內(nèi)部的邏輯。這當然可以移動到其他地方,但我想嘗試并了解是否有一種慣用的方法可以做到這一點。INSERT$internalReference
1 回答

GCT1015
TA貢獻1827條經(jīng)驗 獲得超4個贊
在尷尬的短時間之后,我在這里找到了我想要的答案。
您可以使用實體管理器創(chuàng)建部分引用,以實質(zhì)上允許(相對)干凈的方式執(zhí)行方法 2
在我的問題的上下文中的示例:
$subscription = new Subscription($textThatWillBeMangledToGenerateInternalReference);
$subscription->setMagazine($magazine);
$subscription->setUser($this->_em->getPartialReference(User::class, array('id' => $userId)););
$this->_em->persist($subscription);
$this->_em->flush();
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報
0/150
提交
取消