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