嘿,我有這個我無法克服的有線錯誤。我正在使用Symfony Framweork和Doctrine進行數據庫交互。我正在嘗試開發一個簡單的CRUD API來掌握一些概念。Symfony,Doctrine更新不能按預期工作
實際的問題是,當我嘗試更新我的DB的項目,如果該項目的ID是DB裏面只能否則我得到這個錯誤:
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;
}
}
}
工廠處理響應真或假,所以我n事件,我會嘗試更新一個項目這是ID不在數據庫工廠應迴應false, 'Unable to Update Book'
而不是我得到上述錯誤,任何想法爲什麼傢伙..?
顯然,$ book對象爲null。你有沒有檢查你是否有db中的記錄? –
對象被更新,如果它存在於數據庫中,否則我會得到上面的錯誤。但是如果你看看我的工廠,我爲它做了一個例子....所以,而不是看到我期望看到{flase,無法更新書}響應的錯誤消息。 – John
原因是你不檢查'find()'返回的是什麼(如果這本書不存在,它是'null')。 – xabbuh