【发布时间】:2017-03-15 10:35:08
【问题描述】:
我的问题是,我有表 movies_status,其中有两个外键:“电影”和“谁”。我正在尝试进行 DQL 查询,在其中我通过对象找到单行,外键的 id,但它什么也没找到。
实体:
/**
*
* @var type
*
* @ORM\ManyToOne(targetEntity="movies")
* @ORM\JoinColumn(name="movie", referencedColumnName="id")
*/
private $movie;
/**
*
* @var type
*
* @ORM\ManyToOne(targetEntity="list_base")
* @ORM\JoinColumn(name="who", referencedColumnName="id")
*/
private $who;
控制器
/**
*
* @Route("/introduction/updateTime", options={"expose"=true}, name="int_update_time")
* @Method("post")
*/
public function updateTimeAction(Request $request) {
$time = floor($request->request->get('time'));
$movieUsId = $request->request->get('film_id');
$userId = $request->request->get('id');
$em = $this->getDoctrine()->getManager();
$movie = $em->getRepository('MainBundle:movies')->findOneBy(['useable_id' => $movieUsId]);
$user = $em->getRepository('MainBundle:list_base')->findOneById($userId);
//here it finds nothing
$moviesStatus = $em->getRepository('MainBundle:movies_status')->findOneBy(['who' => $user, 'movie' => $movie]);
$currentTime = $moviesStatus->getFilmTime();
$moviesStatus->setFilmTime($time);
$em->persist($moviesStatus);
$em->flush();
if ($time == $currentTime) {
return new Response("koniec");
}
return new Response("ok " . $time . " " . $userId . " " . $movieUsId . " " . $movie->getId() . " " . $user->getFirstName());
}
错误总是:
Call to a member function getFilmTime() on null
在控制器中,我也尝试按 ID 搜索,但仍然没有。 我还尝试在存储库中创建自定义查询:
public function findOneMS($user, $movie) {
$q = $this->getEntityManager()
->createQuery('SELECT u FROM MainBundle:movies_status u WHERE u.who = :userId AND u.movie = :movieId')
->setParameter('userId', $user)
->setParameter('movieId', $movie)
->getSingleResult();
return $q;
}
是的,数据库中存在行。 提前致谢。
【问题讨论】:
-
您是否尝试过:
$moviesStatus = $em->getRepository('MainBundle:movies_status')->findOneBy(['who' => $user->getId(), 'movie' => $movie->getId()]);? -
是的,我做到了。仍然出现错误
Call to a member function getFilmTime() on null -
用分析器检查查询是否正常以及是否存在符合条件的数据
-
查询似乎没问题:
SELECT t0.id AS id_1, t0.film_time AS film_time_2, t0.open_date AS open_date_3, t0.movie AS movie_4, t0.who AS who_5 FROM movies_status t0 WHERE t0.who = ? AND t0.movie = ? LIMIT 1 Parameters: [0 => 35, 1 => 3] -
也许在这里按 ID 搜索是错误的方式?
标签: php mysql symfony doctrine-orm