Обновить (сохранить и удалить) отношения без использования $related->get();
Я использую codeigniter 2.1.4 & datamapper orm. Я знаю, как сохранить отношения с объектом, и я знаю, как их удалить.
В этом случае у меня есть отношение "многие ко многим", которое я хочу обновить новыми значениями из формы. Теперь я могу использовать это, чтобы сохранить их, что прекрасно работает:
$ousergroupright = new Usergroupright;
$usergrouprights = $ousergroupright->where_in('id', $this->input->post('usergrouprights'))->get();
$ousergroup = new Usergroup;
$ousergroup->get_by_id($id);
$ousergroup->save($usergrouprights->all);
Но это не удаляет записи, которые я "не проверял" в своей форме. Мне нужно удалить объекты, которые я больше не хочу связывать. Каков наилучший способ сделать это (без использования пользовательских запросов)?
Запрос как выше с $ousergroup->where_not_in()
перед сохранением мне кажется излишним (зачем запрашивать базу данных и строить объекты просто, чтобы удалить отношение?):
$ousergroupright = new Usergroupright;
$usergrouprights = $ousergroupright->where_not_in('id', $this->input->post('usergrouprights'))->get();
$ousergroup = new Usergroup;
$ousergroup->get_by_id($id);
$ousergroup->delete($usergrouprights->all);
Есть идеи?
1 ответ
Существует способ удаления объектов, которые вы больше не хотите связывать, без необходимости запрашивать базу данных и создавать объекты просто для удаления отношения. Вы можете использовать утилиту запроса запроса на запуск пользовательского SQL, чтобы удалить все не связанные объекты, БЕЗ необходимости выполнять запрос к базе данных, что-то вроде:
// Create usergroup object
$u = new Usergroup();
// your custom SQL query to delete the unrelated objects
$sql = "delete from usergrouprights where usergroup.id = ? and id usergrouprights.id not in (?)";
// Binding values
$binds = array($idUserGroup , $listOfSelectedItens);
// Run query to populate user object with the results
$u->query($sql);
Подробнее о функции утилиты запросов DataMapper http://datamapper.wanwizard.eu/pages/utility.html