2015-04-04 5 views
6

Ho 2 tabelle chiamate Libri e recensioni. La tabella dei libri ha una relazione uno-a-molti con recensioni.Come utilizzare JOIN in Yii2 Active Record per modello relazionale?

Voglio cercare libri e ordinarli per Recensioni.

Ad esempio, se sono disponibili 10 libri e i libri sono recensiti in Recensioni, quindi voglio trovare tutti i libri utilizzando la clausola WHERE e conteggiare le recensioni e quindi ordinare tutti i libri in base al numero di revisione.

mia query SQL è come segue:

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(); 

E 'darmi seguente messaggio di errore:

SQLSTATE [42S22]: Colonna non trovato: 1.054 Unknown colonna 'CNT' in 'clausola di ordine '

Cosa mi manca qui?

risposta

7

Utilizzare joinWith. Per ulteriori see

Per esempio, per il codice caso come quello:

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

EDIT: trovo soluzione migliore.

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

Grazie. Ma qui, ho bisogno di contare le recensioni totali per ogni libro e poi ordinare l'elenco dei libri in base al numero di recensioni. –

+0

Ciao, grazie. Ho aggiornato la domanda. Volete dare un'occhiata a quello aggiornato. Grazie. –