0

1 つのコントローラーで挿入/更新を解決したい。これは私のコードです:

public function setOwnershipAction(Request $request) {
    $session = $this->get('security.context')->getToken()->getUser();

    $em = $this->getDoctrine()->getManager();

    $game = $em->getRepository('GameShelfGamesBundle:Game')->find($request->request->get('hash'));
    $user = $em->getRepository('GameShelfUsersBundle:User')->find($session->getId());
    $typo = $em->getRepository('GameShelfUsersBundle:OwnState')->find($request->request->get('setownstate')['id']);
    $plat = $em->getRepository('GameShelfGamesBundle:Platforms')->find($request->request->get('platformown')['id']);

    $check = $em->getRepository('GameShelfUsersBundle:Own')->findBy(array(
        'user' => $user,
        'game' => $game
    ));

    if(!$check) {
        $own = new Own;
        $own->setGame($game);
        $own->setUser($user);
        $own->setTypo($typo);
        $own->setPlatforms($plat);
        $own->setUpdated(date("Y-m-d H:i:s"));
        $em->persist($own);
        $em->flush();
    } else {
        $check->setTypo($typo);
        $em->flush();
    }
}

今のところ、挿入 ( if(!$check)true になった後) は機能elseしますが、クリックしないだけです。私のエラーはFatal error: Call to a member function setTypo() on a non-objectです。

4

1 に答える 1

3

findBy()メソッドは配列を返します。findOneBy()を使用するか、結果をループする必要がありfindBy()ます。

于 2013-01-22T13:29:01.963 に答える