gpt4 book ai didi

mysql - 在 symfony 中使用 Doctrine 时我得到了错误的数据

转载 作者:行者123 更新时间:2023-11-29 11:41:24 25 4
gpt4 key购买 nike

我正在尝试使用 Doctrine 构建 SQL 查询。这是我的代码片段:

/**
* @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

最佳答案

问题出在您对 UserSkill 的 PK 上。当 Doctrine 水合时,它将假设具有相同主键的实体是同一实体,如果已经水合,则忽略具有相同 PK 的行。

由于您的 Userskill::$id 不是唯一的,因此只有第一个会被水合,具有相同 id 的后续行将获得对同一实体的引用。

要解决这个问题,您需要create a compound key ,由 id proficiencyId 组成。

但在您的用例中,这将使事情变得不切实际。因此,我只需将 Userskill 上的手动 ID 替换为从 UserUserskill 的实际一对多关系...

关于mysql - 在 symfony 中使用 Doctrine 时我得到了错误的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com