我使用Zend Framework的Docrine 1.2並試圖保存一個Doctrine Collection。無法保存Doctrine_Collection
我使用下面的代碼從我的表類中檢索我的集合。
public function getAll()
{
return $this->createQuery('e')
->orderBy('e.order ASC, e.eventType ASC')
->execute();
}
我也有以下類來重新排序上述事件記錄。
class Admin_Model_Event_Sort extends Model_Abstract
{
/**
* Events collection
* @var Doctrine_Collection
*/
protected $_collection = null;
public function __construct()
{
$this->_collection = Model_Doctrine_EventTypesTable::getInstance()->getAll();
}
public function save($eventIds)
{
if ($this->_collection instanceof Doctrine_Collection) {
foreach ($this->_collection as $record)
{
$key = array_search($record->eventTypeId, $eventIds);
if ($key !== false) {
$record->order = (string)$key;
}
}
return $this->_saveCollection($this->_collection);
} else {
return false;
}
}
}
上述_saveCollection方法如下
/**
* Attempts to save a Doctrine Collection
* Sets the error message property on error
* @param Doctrine_Collection $collection
* @return boolean
*/
protected function _saveCollection(Doctrine_Collection $collection)
{
try {
$collection->save();
return true;
} catch (Exception $e) {
$this->_errorMessage = $e->getMessage();
OpenMeetings_Logger_ErrorLogger::write('Unable to save Doctrine Collection');
OpenMeetings_Logger_ErrorLogger::vardump($this->_errorMessage);
return false;
}
}
事件ID的上述保存方法是簡單地事件的ID的枚舉數組,我使用的陣列的鍵設置的排序使用訂單字段的事件順序。如果我將一個var_dump集合傳遞給一個數組($ this - > _ collection-> toArray()),我會得到正確的數據。但是,當我嘗試保存集合時,出現以下錯誤。
「SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以找到在'order ='0'附近使用的正確語法WHERE eventtypeid ='3''在第1行「
是否有無論如何我可以得到教義擴大這個錯誤,完整的SQL語句將是一個開始,如果有人知道爲什麼這個錯誤發生那麼會非常有幫助。
提前感謝
加里
編輯
我已經修改了我上面的代碼,試圖在上班時間一個記錄,但我仍然得到了同樣的問題。
public function save($eventIds)
{
foreach ($eventIds as $key => $eventId) {
$event = Model_Doctrine_EventTypesTable::getInstance()->getOne($eventId);
$event->order = (string)$key;
$event->save();
}
}