前提・実現したいこと
マスタ(データを新規登録・編集・削除する画面)を作っています。
cakephp2系を使っています。
データを1件削除した際に表示順という項目が連番ではなくなってしまうため、表示順を1から振りなおす機能を追加しました。
以下のソースコードが追加した内容です。
####controller
if ($this->request->is('get')) { $carappliances = $this->carappliances(); $new_order_no = 1; foreach ($aarcppliances as $key => $value){ $aarcppliances[$key]["MtAarCppliance"]["order_no"] = $new_order_no; $new_order_no = $new_order_no + 1; } $this->log($aarcppliances); return json_encode(['success' => 'success', 'data' => $aarcppliances ]); } private function carappliances() { $mtCarApplianceData = $this->MtCarAppliance->find('all', ['order' => 'order_no']); return $mtCarApplianceData; }
###エラーログ
編集した際に出たログです。
( [0] => Array ( [MtAarCppliance] => Array ( [id] => 1 [name] => あ [order_no] => 1 [created_user] => 1 [created_datetime] => 2018-08-08 00:00:00 [modified_user] => 28 [modified_datetime] => 2019-12-20 12:58:33 ) ) [1] => Array ( [MtAarCppliance] => Array ( [id] => 11 [name] => い [order_no] => 2 [created_user] => 28 [created_datetime] => 2019-12-20 10:30:41 [modified_user] => 28 [modified_datetime] => 2019-12-20 12:58:38 ) ) [2] => Array ( [MtAarCppliance] => Array ( [id] => 12 [name] => お [order_no] => 3 [created_user] => 28 [created_datetime] => 2019-12-20 11:56:11 [modified_user] => 28 [modified_datetime] => 2019-12-20 12:58:55 ) ) [3] => Array ( [MtAarCppliance] => Array ( [id] => 10 [name] => う [order_no] => 4 [created_user] => 28 [created_datetime] => 2019-12-20 09:24:02 [modified_user] => 28 [modified_datetime] => 2019-12-20 13:00:31 ) ) [4] => Array ( [MtAarCppliance] => Array ( [id] => 13 [name] => え [order_no] => 5 [created_user] => 28 [created_datetime] => 2019-12-20 11:56:18 [modified_user] => 28 [modified_datetime] => 2019-12-20 13:04:48 ) ) ) 同じものがもう一つありました。
###アップデートに関する部分のソースコード
####index.js
self.updateList = function() { openLoadingModal(); $.getJSON( "/car-maintenance/MtCarAppliances/search", function( data ) { if (data.success) { data.data = addEventToArray(data); self.carappliances( data.data); } else { openDialog('.dialog', 'データ取得に失敗しました。', 'warn'); } closeLoadingModal(); }); };
###テーブルの構造
論理名 物理名 データ型
設備名 name varchar
表示順 order_no integer
登録者 created_user integer
登録日時 created_datetime timestamp
更新者 modified_user integer
更新日時 modified_datetime timestamp
実際に画面に表示しているものは設備名と表示順だけです。
発生している問題・エラーメッセージ
削除時にはちゃんと表示順が更新されて連番になりました。
しかし編集で表示順を変更すると変更後の表示順+1になってしまいます。
なので編集時にちゃんと指定した表示順に変更されるようにしたいです。
しかし、原因が分かりません。
この場合どのようなことが考えられるのでしょうか?
試したこと
上記のソースコードの位置を変更したりしましたが、何も変わらなかったです。
1行目の['order' => 'order_no']を消してみましたが何も変わらなかったです。
$this->logで確認したところ、データの件数*2回実行されていてどのデータも間違った状態で保存されていました。
補足情報(FW/ツールのバージョンなど)
足りない情報などがありましたら、コメントで教えていただけるとありがたいです。
この機能を追加する前の状態は以下のような感じでした。
1.削除しても表示順が更新されない。
2.編集で表示順を変えると、表示順が他のデータとダブってしまう。
3.ダブった状態でも新規登録時はデータの件数を元に新しい表示順を埋め込むためおかしくなります。
あなたの回答
tips
プレビュー