2016-03-01 46 views
0

我試圖用教義建立一個SQL查詢。這裏是我的代碼片段:我在symfony中使用教義時遇到了錯誤的數據

/** 
* @Route("/db", name="user_skill_testing") 
*/ 
public function dbTest() 
{ 
    //all skills for user 

    $userName = "Jelle"; 
    $user = $this->getDoctrine() 
     ->getRepository('AppBundle:User') 
     ->findOneByFirstname($userName); 

    echo "userId: ".$user->getId()."<br />"; 

    $userSkills = $this->getDoctrine() 
     ->getRepository('AppBundle:Userskill')->findById($user->getId()); 

    $proficiencies = array(); 
    foreach ($userSkills as $userSkill) { 
     array_push($proficiencies, $userSkill); 

     echo $userSkill->getId(); 
     echo "-"; 
     echo $userSkill->getProficiency()->getId(); 
     echo "<br />"; 
    } 

    var_dump($userSkills); 

    $html = "<html><body>".$user->getFirstname()."<br /><br />"."</body></html>"; 
    return new Response($html); 
} 

它返回以下網頁(截圖): enter image description here

當我看着它跑查詢...:

enter image description here

..並重新運行它們...:

enter image description here

...我得到一個非常不同的結果。 :( 我不知道爲什麼,誰能幫我 謝謝

編輯:?!使用此代碼來構建查詢再現相同的結果

enter image description here

+1

你能向我們展示Userskill存儲庫中的findById方法嗎? –

+0

它由symfony自動生成。我甚至無法查找它。 – SnelleJelle

+1

但默認的EntityRepository不包含此方法。請將此添加到您的控制器並告訴我們輸出:var_dump(get_class($ this-> getDoctrine() - > getRepository('AppBundle:Userskill'))); –

回答

0

擁有的MySQL產生許多一對多關係幫助教義產生正確的實體。

1

問題在於。你對UserSkill PK。當教義水合物,它會假設具有相同主鍵的實體,是同一實體,忽視與同PK行,如果一個已經被水化。

由於您的Userskill::$id不是唯一的,只有第一一個會水合,後面的行具有相同的id,將獲得對同一個實體的引用。

要解決這個問題,您需要create a compound key,包括id熟練程度。

儘管如此,這會讓事情變得不切實際。所以,我只想從UserUserskill實際的一個一對多的關係替換Userskill您的手冊ID ...

+0

這似乎是要走的路! 我確實在我的數據庫中定義了一個複合鍵,但教義沒有得到我的想法。 如果我在中午休息後修好它,我會讓你知道的 謝謝! – SnelleJelle

+1

教義不讀取任何數據庫定義。你必須在你的映射中定義它或學說不會知道它在那裏。 – NDM

+0

我做到了,但沒有任何變化:( http://i.imgur.com/ewPVFFt.jpg – SnelleJelle

相關問題