Как удалить элемент из модели, но не удалять из базы данных?

Есть список компаний, каждой компании может быть присвоено бесконечное количество "контактов". В БД две таблицы - клиенты и контакты. Создал третью, таблицу, в которой хранятся "связи", то есть два числа - id компании и id контакта.

При создании новой компании можно указать сразу всех контактов, допустим, есть comboBox со всеми контактами. Нажимаешь на выбранный, он исчезает из ComboBox, образуется связь, добавляемая в третью таблицу. Всё хорошо, но не пойму, как удалить элемент из ComboBox? Ему я присвоил отдельную модель вида QSqlQueryModel. То есть, мне не нужно удалять из базы данных ничего, мне просто нужно удалить элемент из модели, и при очередном создании новой компании эту модель обновить, снова заполнив всеми контактами. Какой моделью воспользоваться?

Сделал так:

    assignment_contacts = new QSqlQueryModel();
    assignment_contacts->setQuery("SELECT * FROM contacts");
    ui->comboBox_newContacts->setModel(assignment_contacts);
    ui->comboBox_newContacts->setModelColumn(1);

Выводятся в comboBox все контакты - всё верно, далее:

void MainWindow::on_comboBox_newContacts_activated(int index)
{
database::AddAssignment(QString::number(nextId), contactsModel->data(contactsModel->index(index,0),Qt::DisplayRole).toString());
QSqlQuery query;
query.prepare("SELECT * FROM assignment WHERE companyId = :companyId");
query.bindValue(":companyId", nextId);
if(!query.exec()){
    qDebug() << query.lastError().text();
}
QSqlRecord rec = query.record();
int rowCount = assignment_contacts->rowCount();
while(query.next()){
    for(int i = 0; i < rowCount; i++){
        QVariant data = contactsModel->data(contactsModel->index(i,0),Qt::DisplayRole).toString();
        if(data == query.value(rec.indexOf("contactId")).toString()){
            ui->comboBox_newContacts->removeItem(index);
            break;
        }
    }
}

Связь создается, в БД её видно. Если рядом с ui->comboBox_newContacts->removeItem(index); добавить вывод элементов - они выводятся, то есть всё работает правильно, однако элементы из comboBox не пропадают, хоть удаляя их напрямую (как в коде выше), хоть изменяя модель, при помощи removeRow(index)


Ответы (1 шт):

Автор решения: Main question

Решение оказалось довольно простым, всего лишь нужно было написать правильный запрос в бд, и исходя из этого запроса сделать новую модель.

query.prepare("SELECT id, fullName FROM contacts WHERE contacts.rowid NOT IN (SELECT contactId FROM assignment WHERE companyId = :nextId);");
query.bindValue(":nextId", nextId);
query.exec();
assignment_contacts->setQuery(std::move(query));
ui->comboBox_newContacts->setModel(assignment_contacts);
ui->comboBox_newContacts->setModelColumn(1);

Теперь при нажатии на comboBox я добавляю новый элемент в таблицу assignment, после чего обновляю модель вышеупомянутым запросом и всё заработало. А главное, код очень гибкий и работает как при удалении самой связи, так и при удалении самого контакта из базы данных.

→ Ссылка