この質問を PHP の特定のフォーラムで何度かしましたが、応答がありませんでした。基本的には、codeigniter と datamapper というオブジェクト リレーショナル マッパーを使用しています。オブジェクトをインスタンス化すると、データベース テーブルがオブジェクトとして格納され、フィールドがプロパティとして格納されます。2 つのオブジェクトのプロパティを比較して、削除するレコードを決定しようとしています。基本的に私はこのようなものを持っています:
http://blog.jeremymartin.name/2008/02/easy-multi-select-transfer-with-jquery.html#
私はすでに追加機能を正常に作成しました。しかし、今は編集機能に苦労しています。ユーザーは、カテゴリに関連付けられた親を削除したり、新しい親をカテゴリに追加したりすることができます。したがって、これを考慮して、categories_related_categories 結合テーブルを適宜更新する必要があります。
しかし、foreach ループでオブジェクト プロパティを比較しようとすると、内側のループが 2 回繰り返され、プロパティが複製されます。
public function update(){
$vanity_url = new VanityUrl();
$vanity_url->where('user_id',$this->current_user()->id)->get();
$zones = $this->input->post('zones');
$zone = new Zone();
$zone->where_in('name', $zones)->get();
$subcategory = new Category();
$subcategory->where('id',$this->uri->segment(4))->get();
$old_parents = new Category();
$old_parents = $subcategory->related_category->get();
$unneeded_ids = array();
if(!$this->input->post('catupload')){
if($subcategory->save($zone->all)){
redirect("blogs/$vanity_url->url/categories");
}
else {
echo "Error occurred. Please try again.";
}
}
else {
$new_parents = new Category();
$controller = $this->input->post('catupload');
$new_parents->where_in('controller',$controller)->get();
foreach($new_parents as $new){
foreach($old_parents as $old){
if($new->id != $old->id){
array_push($unneeded_ids, $old->id);
}
}
}
$subcategory->delete($subcategory->related_category->where_in('id',$unneeded_ids)->get());
if($subcategory->save(array($zone->all,$new_parents->all))){
$this->session->set_flashdata('flash_message', 'The category has been successfully updated.');
redirect("blogs/$vanity_url->url/categories");
}
}
}
そのため、ユーザーが選択したものと一致しない ID を取得し、関連するレコードを削除することで、ユーザーが不要になった関係を削除します。
問題は次のとおりです。
array(4) { [0]=> int(126) [1]=> int(127) [2]=> int(126) [3]=> int(127) }
ID を複製する方法がないため、代わりに次のようにする必要があります。
array(2) {[0]=> int(126) [1]=> int(127)}
返信ありがとうございます。