2016-02-21 136 views
2

我有3个表:QSqlRelationalTableModel - 两个引用同一个表,相同的外键

enter image description here

我想显示订单表(订单的开始日期和结束日期,用户的最后名称,服务名称和服务价格)在GUI上使用QTableViewQSqlRelationalTableModel。这里就是我设置表和视图:

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

看来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 
+0

这可能是解决方案,但是,我忘了提,我需要在DB的变化,以及文档说'的QSqlQueryModel类提供了一个读 - 仅用于SQL结果集的数据模型,因此,我需要一些不会是只读的。不管怎么说,还是要谢谢你 :) – yak

1

试试这个:

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