2016-04-04 83 views
-1

我有表staff,其中的字段爲idinitials如何在Yii2中建立這種關係

相關表sales有場sellerlister - 這兩個應該指向initialsstaff表。

所以在銷售表中,可能有不同的工作人員是工作人員的賣主,他是工作人員 - 這是我試圖實施的關係。

我不確定我能在文檔中找到這種東西。

Sales模型,規則方法,我有:

[['lister'], 'exist', 'skipOnError' => true, 'targetClass' => Staff::className(), 'targetAttribute' => ['lister' => 'id']], 
[['seller'], 'exist', 'skipOnError' => true, 'targetClass' => Staff::className(), 'targetAttribute' => ['seller' => 'id']], 

然而,當我試圖通過顯示在staff.initials在GridView的關係,我得到異常

Getting unknown property: app\models\Sale::staff 

我我確定我沒有在某處正確地表達關係,或者我的數據庫設計中存在缺陷?

+0

我們展示你的銷售類 – soju

+0

的對應關係我有的是以上的銷售模式。有什麼我失蹤 – yoyoma

回答

1

首先,它聽起來像你的數據模型是有缺陷的。我這樣說的唯一原因是因爲它可能會影響你需要修改的代碼。

這裏的問題是,幾個工作人員可能有相同的一組縮寫,在這種情況下,你永遠不會知道你的表是誰指的。我建議你保持在sellerlister領域(的initials代替)

staff.id如果我們可以同意上述那麼它聽起來像你缺少你Sales模型的關係。檢查official documentation

你需要下面的方法添加到您的Sales型號:

public function getSeller() 
{ 
    return $this->hasOne(Staff::className(), ['id' => 'seller']); 
} 

public function getLister() 
{ 
    return $this->hasOne(Staff::className(), ['id' => 'lister']); 
} 

一旦做到這一點,你就可以通過訪問這些:

$sale = Sales::find()->one(); 
$sale->lister; // will return a Staff object. 
$sale->seller; // will return a Staff object. 

在GridView你應該能夠以seller.initials和/或lister.initials顯示首字母縮寫。

讓我知道,如果這對你有用。

乾杯

+0

謝謝,但現在我沒有得到錯誤,在gridview它說「(未設置)」? – yoyoma

+0

是數據庫中的首字母縮寫嗎?你可以在要點中顯示你的gridview調用嗎? –

+0

當然:https://gist.github.com/anonymous/81d03996903a73c6f0168bf65d07ff84 – yoyoma