Propel方法更新未定义?

时间:2013-06-16 01:00:46

标签: php propel

我正在尝试运行以下代码:

$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();
循环时

1 个答案:

答案 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()方法在一个查询中进行更新。