2017-01-04 1 views
1

Ich arbeite mit Yii2, um eine grundlegende Website zu erstellen.Daten von yii2 hasmany() Funktion

Ich muss ein Benutzer gemachte Videos laden, wenn sie sich angemeldet haben.

In der Datenbank der Videos in der Video-Tabelle gespeichert sind, Benutzer in der Benutzertabelle gespeichert sind, ist UserVideoJunction die Verknüpfungstabelle, die die Beziehung zwischen den Benutzern und Videos gespeichert werden.

Wenn ich Gii verwende, um die Modelle und CRUD für die 3 Tabellen zu generieren, ist alles in Ordnung, ich kann auf alle Daten zugreifen und sie bearbeiten.

Aber das Problem entsteht, wenn ich versuche, die Videos, die zu einem Benutzer gehören.

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']); 
} 

Der obige Code ist der automatisch generierte Code.

Könnte mir bitte sagen, wie man anzeigt, was von der getVideos() Funktion zurückgegeben wird?

Antwort

1

Try this:

$videos = $user->videos; 

Oder diese:

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

Verwendung von hasMany ist in der User Guide erläutert.

Der Aufruf getVideos() gibt nur die ActiveQuery-Instanz zurück. Sie müssen es irgendwie verwenden, um Ihre Ergebnisse zu erhalten.

Sie können alle Zeilen in Ihrer many-to-many-Beziehung erhalten:

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

Auch Sie können sie wie folgt filtern:

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

Grundsätzlich nach getVideos() können Sie filtern, Gruppe , zählen, sortieren, alles mit ActiveQuery machen, genau wie bei der Verwendung von find().