[英]Doctrine 2 - persisting entities in a many-to-one relationship
我已經為此苦苦掙扎了幾個小時,並且已經閱讀了《 Doctrine》文檔和更多文檔,但是我仍然在掙扎。
我有兩張桌子。 我的“ lookups”表是與“ lookup_statuses”表(一個)有關系的所有者(許多)。 特定查找可以處於多種不同的狀態。
(我認為)這是一種單向的一對多關系。
在代碼中,我搜索lookup_statuses表,並獲取與所需子彈匹配的對象。 我在查找實體上調用setLookupStatus並嘗試將其持久化。 我收到錯誤“ 通過關系找到了新實體 ”。
我使用了反向學說來開始我的領域模型,但是我只是無法弄清楚如何正確實現這種關系。
我的LookupStatuses類(一個)如下所示:
namespace App\Lib\Domain\Datalayer;
/**
* LookupStatuses
*
* @ORM\Table(name="lookup_statuses")
* @ORM\Entity
*/
class LookupStatuses
{
/**
* @OneToMany(targetEntity="App\Lib\Domain\Datalayer\Lookups", mappedBy="lookupStatus", cascade={"persist", "remove"})
*/
private $lookups;
}
我的Lookups表(很多)看起來像這樣:
namespace App\Lib\Domain\Datalayer;
/**
* Lookups
*
* @ORM\Table(name="lookups", indexes={@ORM\Index(name="IDX_4CEC819D037A087", columns={"lookup_status_id"}), @ORM\Index(name="IDX_4CEC8194D39DE23", columns={"camera_event_id"})})
* @ORM\Entity
*/
class Lookups
{
/**
* @var \App\Lib\Domain\Datalayer\LookupStatuses
*
* @ORM\ManyToOne(targetEntity="App\Lib\Domain\Datalayer\LookupStatuses", inversedBy="lookups", cascade={"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="lookup_status_id", referencedColumnName="id")
* })
*/
private $lookupStatus;
}
這是我正在使用的堆棧的版本:
"php": ">=5.4.0",
"laravel/framework": "5.0.*@dev",
"doctrine/orm": ">=2.4.0",
請有人幫我解開這個問題,以便我的用例能正常工作。 我想要:
----更新:包括代碼----
這是示例代碼:
$lookupStatusesService = ServiceFactory::getInstance('LookupStatuses');
$status = $lookupStatusesService->findOne(['slug' => $slug], true);
$cameraEventService = ServiceFactory::getInstance('CameraEvents');
$cameraEvent = $cameraEventService->findOne(['uuid' => $uuid], true);
$unicodeLookupService = ServiceFactory::getInstance('UnicodeLookups');
$unicodeLookup = $unicodeLookupService->findOne(['cameraEvent' =>
$cameraEvent->getId()], true);
$unicodeLookup->setLookupStatus($status);
EntityManager::persist($unicodeLookup);
EntityManager::flush();
Findone()建立querybuilder where子句並返回
$queryBuilder->getQuery()->getResult();
在為此奮斗了3個小時之后,我從辦公室步行到我的車上解決了這個問題。
問題是我正在使用Memcached 。
我從findby獲取的對象是一個Doctrine實體,但是從緩存中返回而不是從Doctrine中返回。 這就是為什么主義認為它是新的。 如果我堅持要從數據庫中獲得新的結果,則代碼可以正常工作。
我懷疑因為我使用的是單向關系,所以LookupStatuses中的@OneToMany是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.