2015-04-04 18 views
6

Kitaplar ve Yorumlar adı verilen 2 tablom var. Kitaplar tablosunda Yorumlar ile bire çok ilişki var.Yii2 Active Record ilişkisel model için nasıl kullanılır?

Kitaplarda arama yapmak ve Yorumlara göre sıralamak istiyorum. Orada 10 kitap mevcuttur ve kitaplar yorumlar inceleme varsa

Örneğin, o zaman WHERE yan tümcesi kullanarak tüm kitapları bulup orada değerlendirmeleri saymak istiyor ve ardından yorum sayısına bağlı tüm kitapları sipariş.

sqlstate [42S22]:

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

Bu hata mesajı aşağıdaki beni veriyor: bulunamadı Sütun: 1054 Bilinmeyen sütun 'cnt' 'sipariş fıkrada

My SQL sorgusu aşağıdaki gibidir '

Burada nelerin eksik?

cevap

7

joinWith'u kullanın.

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

DÜZENLEME: böyle davanız kodu için, Örneğin see

fazlası için ben daha iyi bir çözüm bulmak.

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

teşekkürler. Fakat burada, her bir kitap için toplam incelemeyi saymalı ve ardından yorum listesini temel alarak kitap listesini sıralamalıyım. –

+0

Merhaba, Teşekkürler. Soruyu güncelledim. Güncellenmiş olana bir göz atabilir misiniz lütfen. Teşekkürler. –

İlgili konular