2016-05-13 5 views
0

Ich bin ein Problem in meinem query.Kindly mir gegenüber helfen, das Problem zu sortieren (Ich bin Neuling in Kohana-Framework)Ausgabe in Kohana Abfrage

$posts->select(array(DB::expr('(SELECT COUNT(id_visit) FROM `oc2_visits` WHERE `oc2_post`.`id_post` = `oc2_visits`.`id_ad` AND `oc2_visits`.controller = "Blog" GROUP BY `oc2_visits`.`id_ad`)'), 'hits')); 

     //we sort all ads with few parameters 
     $posts = $posts->order_by('created','desc') 
         ->limit($pagination->items_per_page) 
         ->offset($pagination->offset) 
         ->limit(Theme::get('num_home_blog_posts', 4))->cached() 
         ->find_all(); 

Wie Sie ‚Treffer‘ sehen können, ist Objekt bei DB: expr(). Aus meiner Sicht versuche ich auf die $ posts> hits zuzugreifen; Eigentum. Dann erscheint das Problem, das die Eigenschaft trifft, nicht vorhanden. enter image description here

Bild ist beigefügt, bitte helfen, ich bin kein Experte in kohana Rahmen.

+0

Lassen Sie uns Ihre "Post" Modellklasse-Datei. Du verpasst das "Treffer" -Feld dort in der Fehlermeldung – pogeybait

+0

FYI, als ich anfing, Kohana in Version 2.0 zu verwenden, benutzte ich ORM oft, aber später fand ich es zu restriktiv. Ich habe ORM aufgegeben und verwende jetzt den direkten Zugang zur DB-Instanz wie: $ query = DB :: select ('*') -> von ('oc2_visits) -> where (' id ',' = ', 1); \t $ shipping = $ query-> as_object() -> execute() -> current(); – pogeybait

Antwort

0

Versuchen Sie, diese nicht-ORM-Ansatz:

$query = DB::select(array(DB::Expr('COUNT(v.id_visit)'), 'hits')) 
    ->from(array('oc2_visits', 'v')) 
    ->join(array('oc2_post', 'p'), 'INNER') 
     ->on('p.id_post', '=', 'v.id_ad') 
    ->where('v.controller', '=', 'Blog') 
    ->group_by('v.id_ad') 
    ->order_by('v.created','desc') 
    ->limit($pagination->items_per_page) //why 2 limit statements? Oversight? 
    ->offset($pagination->offset) 
    ->limit(Theme::get('num_home_blog_posts', 4)); 
$posts = $query->execute(); 
//Or if you want objects use: 
$posts = $query->as_object()->execute();