2017-01-04 14 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; 

또는이 : hasMany의의

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

사용 잘 User Guide에 설명되어 있습니다.

getVideos()을 호출하면 ActiveQuery 인스턴스 만 반환됩니다. 결과를 얻으려면 어떻게 든 사용해야합니다. 또한

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

, 당신은이처럼 그들을 필터링 할 수 있습니다 :

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

기본적으로, getVideos() 후 필터링 할 수 있습니다, 그룹

당신은 당신의 다 대다 관계에있는 모든 행을 얻을 수 있습니다 , 카운트, 정렬, find()을 사용할 때처럼 ActiveQuery로 무엇이든 할 수 있습니다.