我一直在做直接的MySQL很長一段時間,現在正在嘗試以ORM的方式做事情。我有一個用戶創建設計的網站。設計表有一個映射到User.id的字段「userId」。設計實體有一個值,$用戶,定義實體之間的關係:用doctrine2中的映射更新實體
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;
這是不錯的,我現在可以加載一個設計實體,並以$設計 - >用戶>姓氏獲取用戶的姓氏。
現在讓我們說一個用戶創建一個新的設計。我喜歡保存實體:
$design = new Design();
$design->setTitle($_POST['title']);
$design->setUserId($_POST['userId']);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($design);
$em->flush();
當我做到這一點,它沒有這樣的消息,用戶id,這使得沒有空,爲空。我想我可能會錯誤地傳遞給它,但是當我刪除它工作正常設計實體$用戶,所以我認爲這是預期中的用戶對象傳遞,以及像:
$design->user = new User($userId)
我不我真的想添加一個數據庫調用來獲取整個用戶,當我已經知道所需的ID時。處理這個最簡單的方法是什麼?
在持久化Design實體的控制器操作中 - 您是否已經獲取用戶e。 G。進行訪問/權限檢查等?另外,如果你做$ design-> user = new User($ userId);你可能會從你的數據庫中獲得另一個持久保存的用戶或重複的輸入錯誤。 – Max 2012-07-28 20:36:54
這是一個很好的問題。設計通過API提交(它們不是圖像,但規格),因此我使用安全令牌來確定用戶標識。 API只是獲取令牌及其設計規範,而令牌不包含整個用戶對象。這是關於新設計,因爲你是對的,當他們編輯現有的設計時,控制器會提供包括$ user在內的整個對象。 – SkippyFlipjack 2012-07-28 21:59:22