2 Stimmen

Codeigniter Rückgabe Ergebnis und Zeile

In der Klasse Model verwende ich return $query->row(); um einzelne Zeilen zurückzugeben und return $query->result(); wenn mehrere Zeilen zurückgegeben werden.

Auf einer einzigen Seite muss ich einzelne Zeilen und mehrere Zeilen aus 2 separaten Tabellen zurückgeben.

Tabelle users enthält allgemeine Informationen wie den Benutzernamen, den vollständigen Namen und die E-Mail-Adresse. Tabelle user_links enthält Links, die von dem jeweiligen Nutzer eingereicht wurden, und hat mehrere Zeilen für jeden Nutzer.

Meine Anfrage

        $this->db->select('*');
        $this->db->from('users');
        $this->db->join('user_links', "user_links.user_id = users.user_id");
        $this->db->where('users.user_id', $user_id);
        $this->db->where('user_links.user_id', $user_id);
        $query = $this->db->get();
        return $query->row(); 

In meinem Controller lade ich die Abfrage in meinem View durch

$data['row'] = $this->User_model->user_read($user_id); ,

$user_id wobei das 3. URL-Segment die eindeutige Benutzerkennung enthält.

Schließlich rufe ich in meiner Ansicht Zeilen ab, indem ich echo $row->first_name;

Dies funktioniert für einzelne Zeilen, aber wie kann ich eine foreach Schleife für Benutzerlinks? Das Ziel ist es, Schleifen für einzelne Zeilen zu vermeiden und sie nur für den Abruf mehrerer Zeilen zu verwenden.

6voto

Odnxe Punkte 634

Dies ist ein Pseudocode, aber Sie können wahrscheinlich etwas wie folgt tun

    $this->db->select('*');
    $this->db->from('users');
    $this->db->join('user_links', "user_links.user_id = users.user_id");
    $this->db->where('users.user_id', $user_id);
    $this->db->where('user_links.user_id', $user_id);
    $query = $this->db->get();
    if ($query->num_rows() == 1)
    {
        return $query->row(); 
    }
    elseif ($query->num_rows() > 1)
    {
        return $query->result_array(); //This returns an array of results which you can whatever you need with it
    }
    else 
    {
         //Add some logic to handle if there are zero results
    }

2voto

Frankie Punkte 23889

Schwer zu sagen, was Sie wollen.

Sie möchten eine Funktion, die prüft, ob Sie eine row() oder eine result() und behandeln sie entsprechend.

Meiner Meinung nach wäre Ihr Code einfacher zu lesen (und zu pflegen), wenn Sie einfach alles als result() . Und prüfen Sie, ob die Menge leer ist, um dem Benutzer eine nette Nachricht zu zeigen.

2voto

Sukumar Punkte 3332

Wenn ich Ihre Frage richtig verstehe, möchten Sie sowohl die Benutzerdaten als auch die user_links-Daten mit einer einzigen Abfrage abrufen und dabei vermeiden, dass Sie die Daten des Benutzers durchlaufen. Obwohl dies mit result_array möglich sein könnte, würde ich davon abraten, da Sie 0 Ergebnisse erhalten, wenn es keine Einträge in user_links für diesen bestimmten Benutzer gibt.

Mein Vorschlag ist, dass Sie zwei Abfragen verwenden, eine, um den Benutzer aus der Tabelle user zu erhalten, eine andere, um die Links des Benutzers aus der Tabelle user_links zu erhalten. So können Sie auch Joins vermeiden.

1voto

Obto Punkte 1377

Es klingt, als ob Sie einige der anderen Funktionen suchen, die bereits von CIs Active Record bereitgestellt werden: http://codeigniter.com/user_guide/database/results.html

Für das, was Sie tun, klingt es wie die Verwendung der eingebauten Funktion result_array funktionieren würde. Sie verwenden sie wie folgt:

DEM OBIGEN LINK ENTNOMMEN

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

0voto

moahmed ayed Punkte 628

Sie können diese Zeile einfach ersetzen:

$this->db->join('user_links', "user_links.user_id = users.user_id");

Mit diesem:

$this->db->join('user_links', "user_links.user_id = users.user_id", 'left outer');

Join in codeigniter verwendet INNER JOIN standardmäßig, aber in einigen Fällen, wenn keine Daten in user_links es gibt nichts zurück, also können Sie verwenden LEFT JOIN in Ihrem Rahmenwerk CI verwendet, wie ich es oben erwähnt habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X