2016-02-21 225 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")); 
相關問題