Я задавал этот вопрос несколько раз на форумах, посвященных php, но не получил ответа. В основном я использую codeigniter и объектный реляционный преобразователь под названием datamapper. Когда вы создаете экземпляр объекта, он сохраняет таблицу базы данных как объект, а поля - как свойства. Я пытаюсь сравнить свойства двух объектов, чтобы определить, от каких записей избавиться. В основном у меня есть что-то вроде этого:
http://blog.jeremymartin.name/2008/02/easy-multi-select-transfer-with-jquery.html#
Я уже успешно создал свою функцию добавления. Но сейчас я борюсь с функцией редактирования. Пользователь может захотеть удалить родителей, связанных с категорией, или добавить новых родителей в категорию. Поэтому мне нужно учесть это и соответственно обновить таблицу присоединения к категории category_related_categories.
Но когда я пытаюсь сравнить свойства объекта в цикле foreach, он дважды повторяет внутренний цикл и дублирует свойства:
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");
}
}
}
Поэтому я удаляю любые отношения, которые больше не нужны пользователю, захватывая идентификаторы, которые не соответствуют тому, что выбрал пользователь, и удаляя связанные записи.
Вот проблема:
array(4) { [0]=> int(126) [1]=> int(127) [2]=> int(126) [3]=> int(127) }
Вместо этого все должно быть так, поскольку идентификаторы нельзя дублировать:
array(2) {[0]=> int(126) [1]=> int(127)}
Спасибо за ответ.