2016-07-29 10 views
0
function mostViewedTracks() { 
    $this->load->database();   
    $this->db->select("*"); 
    $this->db->from("file"); 
    $this->db->order_by("views", "desc"); 
    $this->db->limit(8); 
    $query = $this->db->get(); 
    if($query->num_rows() > 0) 
    { 
     $results = $query->result(); 
    } 
    return array(); 
} 

, wenn ich für dieses Modell gibt es Fehler, dass ungültiges Argument für foreach geliefert()Invalid argument für foreach geliefert() in codeigniter Modell

dies meine Ansicht Code ist:

<?php if(!empty($most_viewed)) { ?> 
    <?php foreach($most_viewed as $row): ?> 
    <a href="<?php echo base_url('index.php/home/track');?>/<?php echo $row->id;?>" class="list-group-item"> 
    <img class="track-list-img" src="<?php echo base_url('assets/img/music');?>/<?php echo $row->id;?>.jpg"> 
    <div class="list-track-infoo"> 
    <h4 class="list-group-item-heading"><?php echo $row->title;?><span class="badge"><?php echo $row->views;?><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span></span> </h4> 
    <p class="list-group-item-text"><?php echo $row->singer;?></p> 
    </div> 
    </a> 
    <?php endforeach; ?> 
    <?php} ?> 

Aktualisiert

-Controller

function track() { 
    $id = $this->uri->segment(3); 
    $data1['track'] = $this->view_models->track($id); 
    $data1['most_viewed'] = $this->view_models->mostViewedTracks(); 
    $this->load->view('includes/header'); 
    $this->load->view('track', $data1); 
    $this->load->view('includes/footer'); 
} 

Ich habe mein Bestes versucht, dieses Problem aber alles umsonst

+1

richtigen Code liefern –

+0

überprüfen Sie bitte wieder habe ich aktualisiert meine Frage –

+0

Ihre Rückkehr Array verwenden return $ Ergebnisse; in Modell –

Antwort

1

Statt return array(); Sie Ergebnismenge zurückkehren zu lösen von Modellen

if($query->num_rows() > 0) 
    { 
     return $query->result();// return result set 
    }else{ 
      return FALSE;// 
    } 

IN Controller-Datei müssen Sie Ihre Modelle Funktion als

nennen
$data1['most_viewed'] = $this->view_models->getFeaturedTracks();// change mostViewedTracks to getFeaturedTracks 

Im Hinblick verwenden sie es als

<?php foreach($most_viewed as $row): ?>// remove $row1 to $row 
+0

es wäre besser, nicht von if-Anweisung zurückzukehren ... die Methode wird erwartet, etwas zurückzugeben, setzen Sie das Array in eine Variable und geben Sie das zurück. –

+0

Yep gibt false zurück, wenn kein Ergebnis in Frage kommt !!Nun, OP vergessen, die Modellfunktion 'getFeaturedTracks' @ M.I zu nennen. – Saty

+0

das gleiche Problem, nachdem diese Änderungen vorgenommen wurden. –

1

Sie müssen zwei Fehler ändern,

You should return the `$result` array in your model like, 

$results = $query->result(); 
return $results; 

Und in foreach Änderung $row1 zu $row, die den Fehler erzeugt. siehe,

<?php foreach($most_viewed as $row): ?> 
+0

zurückgeben $ Ergebnisse, verpasst die "s" ... auch instanziieren $ Ergebnisse als null oder leer Array und prüfen, ob nicht null oder leer ist, bevor Sie es in foreach –

+0

@ M.I. Danke, ich habe bearbeitet :) –

+0

das gleiche Problem, nachdem diese Änderungen vorgenommen wurden –

0

Funktion dieses mögen, sollten ....

function getFeaturedTracks() { 
    $results = array(); 
    $this->load->database();   
    $this->db->select("*"); 
    $this->db->from("file"); 
    $this->db->order_by("views", "desc"); 
    $this->db->limit(8); 
    $query = $this->db->get(); 
    if($query->num_rows() > 0) 
    { 
     $results = $query->result(); 
    } 
    return $results; 
}