QSqlRelationalTableModel - две ссылки на одну и ту же таблицу, одинаковые внешние ключи

У меня есть 3 таблицы:

введите описание изображения здесь

Я хотел бы отобразить таблицу "Заказы" (даты начала и окончания заказа, фамилию пользователя, имя и стоимость услуги) в графическом интерфейсе пользователя, используя QTableView а также QSqlRelationalTableModel, Вот где я установил таблицу и вид:

this->ordersTable = new QTableView(this);
this->model = new QSqlRelationalTableModel(this, db->getDB());
this->model->setTable("ORDERS");
this->model->setRelation(3, QSqlRelation("USERS", "id", "lastname"));
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name"));
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "price"));
this->model->select();
this->ordersTable->setModel(this->model);
this->ordersTable->hideColumn(0);

Но когда я делаю третий setRelation вызов, кажется, перезаписывает второй вызов: я вижу только цену на GUI, а не имя и цену. И мне нужно поместить оба поля - имя и цена из таблицы служб на мой взгляд.

2 ответа

Попробуй это:

this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name, price"));

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

QSqlQueryModel model;
QString q = "your sql query";
model.setQuery(q, db->getDB());
tableView->setModel(model);

Для запроса вы можете достичь своей цели с помощью простого запроса внутреннего соединения.

SELECT O.ID, O.START_TIME, O.END_TIME, U.LASTNAME, S.NAME, S.PRICE
    FROM ORDERS O
        INNER JOIN USERS U
            ON O.USER_ID = U.ID
        INNER JOIN SERVICE S
            ON O.SERVICE_ID = S.ID
Другие вопросы по тегам