我正在尝试运行以下代码:
$post = PostQuery::create()
->findPk($id);
$post->update($params);
该方法取自http://propelorm.org/documentation/03-basic-crud.html,但我收到错误:
致命错误:未捕获的异常'PropelException',并在/usr/share/php/propel/om/BaseObject.php:426中显示消息'调用未定义的方法:更新'
在这种情况下,我做错了什么?我可以使用delete-method以相同的方式成功删除:
$post = PostQuery::create()
->findPK($id);
$post->delete();
更新
我尝试了上面提到的解决方案,第一个解决方案效果很好,但不是第二个解决方案。
$post = PostQuery::create()
->filterById($id)
->update($params);
这会引发另一个错误
致命错误:未捕获的异常'PropelException',消息'不能 获取未定义列phpName的ColumnMap:id'in /usr/share/php/propel/map/TableMap.php:384
尽管schema.xml对我来说是正确的:
<table name="post" phpName="Post" idMethod="native">
<column name="id" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
我不知道这里可能出现什么问题,因为我可以使用find() - 方法和
来获取id$post->getId();
循环时。
答案 0 :(得分:2)
您可以这样更新。
在你的情况下,你应该做这样的事情(如果$params
是一个带有修改值的key =&gt;值数组):
$post = PostQuery::create()
->findPk($id);
$post->fromArray($params);
$post->save();
或者你可以快速完成:
$post = PostQuery::create()
->filterById($id)
->update($params);
您的解决方案无效,因为您已使用find()
检索对象。如果要更新已检索的对象,则必须使用save()
方法(而不是update()
)。但是,如果您没有恢复该对象,则可以使用update()
方法在一个查询中进行更新。