我试图更新一个值但是一旦我尝试设置它就会返回此错误
Error: Call to a member function setPGuID() on a non-object in D:\xampp\htdocs\symfony\src\CQ\IntranetBundle\Controller\DefaultController.php line 19
这是我的DefaultController的代码,因为我从Symfony2 Docs中复制了它,我没有任何可能错误的ID。
class DefaultController extends Controller {
public function indexAction() {
$em = $this->getDoctrine()->getManager();
$karte = $em->getRepository('CQIntranetBundle:Karte')->findByPGuId('00f8e77c-d8c2-4c7f-8e4a-384cc7689da0');
if (!$karte) {
throw $this->createNotFoundException(
'No product found for id '
);
}
$karte->setPGuID('New product name!');
$em->flush();
}
}
如果我做了
exit(\Doctrine\Common\Util\Debug::dump($karte));
它返回此
array(1) {
[0]=>
object(stdClass)#497 (9) {
["__CLASS__"]=>
string(30) "CQ\IntranetBundle\Entity\Karte"
["pGuId"]=>
string(36) "00f8e77c-d8c2-4c7f-8e4a-384cc7689da0"
["PBarcode"]=>
string(13) "3321231140001"
["PAnreise"]=>
string(8) "DateTime"
["PAbreise"]=>
string(8) "DateTime"
["PMGuId"]=>
string(36) "07b7c4cf-3441-4339-9b3c-1a581e1271ba"
["PDateCreate"]=>
string(8) "DateTime"
["PDateModify"]=>
string(8) "DateTime"
["PDateAccess"]=>
string(8) "DateTime"
}
}
答案 0 :(得分:2)
根据文件:
http://symfony.com/doc/current/book/doctrine.html
您正在使用一个返回数组的方法,无论它返回多少结果。
在您的示例中,它可能会返回1个结果,因为您使用的密钥是唯一的。
在这种情况下,您可以使用:
$karte = $em->getRepository('CQIntranetBundle:Karte')->findByPGuId('00f8e77c-d8c2-4c7f-8e4a-384cc7689da0')[0];
将直接将$karte
指向第一个(也是唯一的)对象到数组中。
通过使用仅返回一个结果的方法将获得相同的结果,因为前一个回答者指向findOneBy...()
答案 1 :(得分:0)
$karte
是一个数组,如果要在数组的每个元素上设置属性,则必须使用循环。
或者,如果您只想获得一个Karte
,则应使用findOneBy
代替findBy
.....