要素の位置を更新するためのこの小さなコードがあります
public function moveUp($id) {
$row = $this->find($id)->current();
$kategoria = $row->kategoria;
$position = $row->position;
if($position > 1) {
$data1 = array(
'position' => new Zend_Db_Expr('position - 1')
);
$where1['id = ?'] = $id;
$this->getDefaultAdapter()->update($this->_name, $data1, $where1);
$data2 = array(
'position' => new Zend_Db_Expr('position + 1')
);
$where2['position = ?'] = $position - 1;
$where2['kategoria = ?'] = $kategoria;
$this->getDefaultAdapter()->update($this->_name, $data2, $where2);
}
}
問題は、2番目の更新のみが実行され、最初の更新は何も実行しないことです。2番目の更新をコメントアウトすると、最初の更新は正常に機能します。何故ですか?
また、+ /-1だけでなく、次に小さい/大きい位置を確認する必要がありますか?これは、アプリケーションの他の部分のコードが位置列にギャップを作らないことを前提としています。