嘿所有我有这个有线错误,我无法克服。我使用Symfony Framweork和Doctrine进行数据库交互。我正在尝试开发一个简单的CRUD API来掌握一些概念。
实际问题是,当我尝试更新数据库中的项目时,只有当项目的ID位于数据库内部时才会起作用,否则我会收到此错误:
Error: Call to a member function setTitle() on a non-object
查看我的存储库:
<?php
namespace BooksApi\BookBundle\Repositories;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\QueryException;
class UpdateBookRepository
{
/**
* @var EntityManager
*/
public $em;
/**
* @param EntityManager $entityManager
*/
public function __construct(
EntityManager $entityManager
){
$this->em = $entityManager;
}
public function updateBook($id, $update)
{
try {
$book = $this->em->getRepository('BooksApiBookBundle:BooksEntity')
->find($id);
$book->setTitle($update);
$this->em->flush();
} catch (\Exception $em) {
throw new QueryException('003', 502);
}
return $book;
}
}
我的工厂:
<?php
namespace BooksApi\BookBundle\Repositories;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query\QueryException;
class UpdateBookRepository
{
/**
* @var EntityManager
*/
public $em;
/**
* @param EntityManager $entityManager
*/
public function __construct(
EntityManager $entityManager
){
$this->em = $entityManager;
}
public function updateBook($id, $update)
{
$book = $this->em->getRepository('BooksApiBookBundle:BooksEntity')
->find($id);
if ($book)
{
try {
$book->setTitle($update);
$this->em->flush();
} catch (\Exception $em) {
throw new QueryException('003', 502);
}
return $book;
} else {
return false;
}
}
}
工厂处理响应的真或假,所以如果我将尝试更新ID不在DB中的项目,工厂应该用false, 'Unable to Update Book'
回复而不是我得到上述错误,任何想法为什么伙计们..?
答案 0 :(得分:1)
@Tomazi,您可以通过在调用&#34; setTitle&#34;之前检查您的对象是否存在来避免错误。方法。
public function updateBook($id, $update)
{
$book = $this->em->getRepository('BooksApiBookBundle:BooksEntity')->find($id);
if ($book) {
$book->setTitle($update);
$this->em->flush();
return $book;
}
return null;
}
答案 1 :(得分:0)
在继续执行代码之前,请确保$ book对象不为空。该错误表明$ book为空/空。 此外,坚持您的对象,然后再使用 flush 。
$this->em->persist($book);
$this->em->flush();