2017-01-04 43 views
1

我正在使用yii2創建基本網站。從yii2獲取數據hasmany()函數

我需要加載用戶喜歡的視頻,當他們登錄。

在 視頻存儲在視頻數據庫表中, 用戶存儲在用戶表, UserVideoJunction是存儲用戶和視頻之間的關係結合表。

當我使用Gii生成3個表格的模型和CRUD時,一切正常,我可以訪問和操作所有數據。

但是,當我嘗試獲取與用戶相關的視頻時,問題就出現了。

public function getUservideojunctions() 
{ 
    return $this->hasMany(Uservideojunction::className(), ['UserID' => 'UserID']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getVideos() 
{ 
    return $this->hasMany(Video::className(), ['P_ID' => 'VideoID'])->viaTable('UserVideoJunction', ['UserID' => 'UserID']); 
} 

上面的代碼是自動生成的代碼。

請問一些請告訴我如何顯示getVideos()函數返回的內容?

回答

1

試試這個:

$videos = $user->videos; 

或者這樣:

$videos = $user->getVideos()->all(); 
2

的hasMany的用法是在User Guide很好的解釋。

調用getVideos()只返回ActiveQuery實例。你需要以某種方式使用它來獲得你的結果。

你可以在你的許多一對多關係中的所有行:

$videos = $user->getVideos()->all(); 

此外,您還可以這樣進行篩選:

$videos = $user->getVideos() 
    ->where(['>', 'year', 2000]) 
    ->orderBy('id') 
    ->all(); 

基本上,getVideos()後,您可以進行篩選,組,計數,排序,對ActiveQuery做任何事情,就像使用find()時所做的一樣。