2016-03-05 52 views
1

我有一個對象$ user,它與$ establishment有一對多的關係。我可以使用:在Doctrine 2中設置非永久關係

$user->getEstablishments(); 

用戶可以選擇一個穩定工作。我有這樣的方法,我在控制器中稱:我在查看通話

$user->setCurrentEstablishment($establishment); 

這一個:

$establishment = $user->getCurrentEstablishment(); 

我希望能夠調用:

$user->setCurrentEstablishmentBy Slug($establishment_slug); 

其中slug是一個字符串,並讓用戶對象查找建立。

學說不鼓勵訪問實體對象內的實體管理器的做法,但我認爲在控制器中使用它更糟糕。

我懷疑是否存在一些特殊的Doctrine註解來處理像這樣的非持久性關係,或者應該使用通過服務爲服務實體管理器提供服務以外的其他方法。從模型中引用其他實體的一種簡單方法。

¿是否有? ¿我怎麼能這樣做?

+3

爲什麼你認爲使用實體管理器的控制器是壞? – Cerad

+0

您應該在控制器或服務中(例如UserService - 您需要創建它)。 –

+0

這不是在控制器中使用實體管理器是不好的。這是該實體應該給你一些有關自己的相關數據,而無需你自己收集在控制器中。就像它給你通常的持久關係一樣,它也應該爲你提供運行時間,非持久性關係,就像在我的例子中,通過slug來記錄相關記錄。只是我的觀點。 –

回答

1

Doctrine中沒有Annotation可以將slu convert轉換爲對象。

什麼可以幫助你是ParamConverter,它可以自動將查詢中的slu convert轉換爲對象。但它仍然必須在Controller中使用。

用法示例:

/** 
* @Route("/some-route/{slug}") 
* @ParamConverter("object", class="AppBundle:Establishment", options={"id" = "slug", "repository_method" = "findEstablishmentBySlug"}) 
*/ 
public function slugAction(Establishment $object) 
{ 
... 

文檔約PARAM轉換器:http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

+0

我是唯一一個認爲不能做到這一點的人只是很糟糕嗎? –