2013-06-16 2 views
1

Я пытаюсь запустить следующий код:Обновление метода Propel не определено?

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

$post->update($params); 

Метод взят из http://propelorm.org/documentation/03-basic-crud.html, но я receice ошибки:

Fatal error: Uncaught exception 'PropelException' with message 'Call to undefined method: update' in /usr/share/php/propel/om/BaseObject.php:426

Что может я сделал неправильно в этом случае? Я могу успешно удалить с удаления-методом с использованием таким же образом:

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

$post->delete(); 

Update

Я попытался упомянутые решения, то первый из них работает хорошо, но не второй.

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

Теперь это бросает другую ошибку

Fatal error: Uncaught exception 'PropelException' with message 'Cannot fetch ColumnMap for undefined column phpName: 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() и

$post->getId(); 

во время цикла.

ответ

2

Вы можете обновить этот способ.

В вашем случае, вы должны сделать что-то вроде этого (если $params является массив ключ => значение с модифицированным значением):

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

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

Или вы можете сделать это быстро:

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

Ваше решение не работает, потому что вы уже извлекли объект, используя find(). Если вы хотите обновить объект, который вы уже извлекли, вы должны использовать метод save() (а не update()). Но если вы не переусердствуете объект, вы можете сделать обновление в одном запросе, используя метод update().

+1

Первое решение работает для меня, к сожалению, не второе, что я бы предпочел. Возможно, вы можете вернуться к моему обновленному вопросу для достижения этого; в любом случае спасибо за вашу помощь и объяснение. – 32bitfloat

+1

@ 32bitfloat попробуйте 'filterByPK', даже если' filterById' должен работать над вашей схемой. – j0k

+1

Предположим, вы имели в виду 'filterByPrimaryKey' (который признан моей IDE), поскольку' filterByPK' ожидает одинаково названный столбец (Неизвестный столбец Pk в модели После). Я боюсь, что использование 'filterByPrimaryKey' возвращается в том же сообщении об ошибке, что указано выше в обновлении. Может ли быть проблемой, что во многих таблицах в качестве первичного ключа используется столбец с именем id? Kinda weird ... – 32bitfloat

Смежные вопросы