参考にした記事
上記の記事を参考にして、ドラッグアンドドロップでのデータの表示順並べ替え機能を実装していたところ、時折、うまくいかない(保存されない)ことがあった。
原因が分かったので、その対応策を備忘録的に記録しておきます。
原因について
下記は、参考にした記事から引用したもの。
新たな表示順を割り振る箇所。
for ($i = 0; $i < count($article_list); $i++) {
$num = $result[$i];
$article_list[$num]['Article']['order'] = $i;
$this->Article->save($article_list[$num]);
}
原因は、参考記事の方法だと表示順のカラムとなるorderの値が連番になっていないといけないからだった。
私が、開発していたwebアプリでは、並べ替え機能の他に削除機能も搭載していたから、削除した際に連番ではなくなってしまう。
考えられる対策としては、削除をするか、並べ替えをするときに、再度、番号を昇順で付け直すことだろう。
削除機能は、CakephpのpostLinkで実装していたので、今回は、後者を選んだ。
引用したコードの前に下記のコードを実行すれば行けるはず。
for ($i = 0; $i < count($article_list); $i++) {
$article_list[$i]['Article']['order'] = $i;
$this->Article->save($article_list[$num]);
}
もっと良い方法があれば、コメントで教えてください。