2015-04-04 13 views
6

Mam 2 tabele o nazwie Książki i recenzje. Tabela książek ma relację jeden-do-wielu z recenzjami.Jak używać JOIN w Yii2 Active Record dla modelu relacyjnego?

Chcę wyszukiwać książki i sortować je według recenzji.

Na przykład, jeśli dostępnych jest 10 książek, a książki mają recenzję w recenzjach, chcę znaleźć wszystkie książki za pomocą klauzuli WHERE i liczyć tam recenzje, a następnie zamówić wszystkie książki na podstawie numeru recenzji.

Moje zapytanie SQL jest jak następuje:

Books::find() 
    ->where([ 
    'and', 
    ['like', 'books.bookName', $bookName], 
    ['like', 'books.status', 'Enabled'] 
    ]) 
    ->joinWith(['reviews' => function ($q){ 
     $q->select(['COUNT(*) as cnt']); 
    }]) 
    ->orderBy(['cnt' => 'DESC']) 
    ->all(); 

To daje mi następujący komunikat o błędzie:

SQLSTATE [42S22]: Column not found: 1054 Unknown kolumnie 'CNT' w klauzuli porządku "

Czego tu mi brakuje?

Odpowiedz

7

Użyj joinWith. Dla bardziej see

Na przykład dla kodu przypadku tak:

Books::find() 
    ->joinWith(['reviews' => function ($q) { 
     $q->select(['COUNT(*) as cnt']); 
    }]) 
    ->orderBy(['cnt' => 'DESC']) 
    ->all(); 

EDIT: znaleźć lepsze rozwiązanie.

Books::find() 
    ->joinWith(['reviews']) 
    ->select(['*', 'COUNT(reviews.*) as cnt']) 
    ->groupBy('RELATION_FIELD(Example: reviews.book_id)') 
    ->orderBy(['cnt' => 'DESC']) 
    ->all(); 
+0

Dzięki. Ale tutaj muszę liczyć całkowite recenzje dla każdej książki, a następnie posortować listę książek na podstawie numeru recenzji. –

+0

Cześć, dzięki. Zaktualizowałem pytanie. Czy mógłbyś zajrzeć do zaktualizowanego? Dzięki. –

Powiązane problemy