2016-05-16 27 views
7

Haber tablosum ve ilgili news_comment tablosu var. news_comment tablosuyla ilişki haberlerini tanımladım. önbelleğe edilecektir haber tablodan veri alma olduğunuYii2: ActiveRecord ilişkileri tarafından yapılan sorguların önbelleğe alınması

$result = News::getDb()->cache(function() use($id) { 
    return News::find()->with('newsComment')->where(['news.id' => $id])->one(); 
}); 

Sadece sorgu: Bu sorguyu yürütmek durumunda

. İlgili tablodan seçilen sorgu değildir.

Onları ayrı ayrı yazmak zorunda kalmadan, ilgili tablolardan veri almak için yürütülen ana sorgu ve sorguları önbelleğe almak mümkün mü?

$db = News::getDb(); 
$result = $db->cache(function ($db) use ($id) { 
    $query = new \yii\db\Query; 
    $query->select("news.*,newsComment.*") // write table name for newsComment model and also in join 
     ->from('news') 
     ->leftjoin('newsComment','newsComment.id=news.product_id') 
     ->where(['news.id' => $id]) 
     ->one(); 

    $command = $query->createCommand(); 
    $result = $command->queryAll(); 

    return $result; 

}); 
+0

Sen denediniz 'joinWith' kullan? http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#joining-with-relations –

+0

@PatrykRadziszewski evet, ve hiçbir fark yaratmıyor. – offline

+0

Bu (birkaç hafta önce denenmiş) çalışmalıdır, aynı sorguyu 2 kez uygulandığını nasıl kontrol ettiğinizi bize bildirin. – soju

cevap

2

Bu deneyin

$result = News::getDb()->cache(function ($db) { 
    return News::find()->with('newsComment')->where(['news.id' => $id])->one(); 
}); 

Ya sorguda kendisi önbelleği ekleyin:

$result = News::find()->with('newsComment')->where(['news.id' => $id])->cache(60)->one(); 
0

deneyin bir param olarak $db veya Yii::$db eklemek için:

İlgili konular