1

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

$post = PostQuery::create()
    ->findPk($id);

$post->update($params);

该方法取自http://propelorm.org/documentation/03-basic-crud.html,但我收到一个错误:

致命错误:在 /usr/share/php/propel/om/BaseObject.php:426 中带有消息“调用未定义方法:更新”的未捕获异常“PropelException”

在这种情况下我做错了什么?我可以使用删除方法以相同的方式成功删除:

$post = PostQuery::create()
        ->findPK($id);

$post->delete();

更新

我尝试了上述解决方案,第一个效果很好,但第二个效果不佳。

$post = PostQuery::create()
    ->filterById($id)
    ->update($params);

现在这会引发另一个错误

致命错误:在 /usr/share/php/propel/map/TableMap.php:384 中未捕获的异常 'PropelException' 带有消息 'Cannot fetch ColumnMap for undefined column phpName: id'

虽然 schema.xml 对我来说看起来是正确的:

 <table name="post" phpName="Post" idMethod="native">
    <column name="id" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>

我不知道这里可能是什么问题,因为我可以通过使用 find() 方法和

$post->getId();

循环时。

4

1 回答 1

2

您可以通过这种方式进行更新。

在您的情况下,您应该执行以下操作(如果$params是具有修改值的键 => 值数组):

$post = PostQuery::create()
    ->findPk($id);

$post->fromArray($params);
$post->save();

或者您可以快速完成:

$post = PostQuery::create()
    ->filterById($id)
    ->update($params);

您的解决方案不起作用,因为您已经使用find(). 如果要更新已检索的对象,则必须使用save()方法(而不是update())。但是,如果您不检索对象,则可以使用该update()方法在一个查询中进行更新。

于 2013-06-17T07:34:12.360 回答