2013-04-11 10 views
27

Erfolgt die Abfrageausführung unter der get_where()-Klausel der folgenden codeigniter active-record-Anweisung?

$this->db->select('*'); 
    $q = $this->db->get_where('Contacts', array('id' => $contact_id)); 

    $sql = $this->db->last_query(); 

Oder es geschieht, wenn Sie die result_array() nennen?

Und ist $this->db->last_query(); eine zuverlässige Möglichkeit, die Abfragezeichenfolge abzurufen.

Antwort

61

Die Abfrage Ausführung geschieht auf alle Methoden erhalten wie

$this->db->get('table_name'); 
$this->db->get_where('table_name',$array); 

Während last_query die letzte Abfrage enthält, die

$this->db->last_query(); 

ausgeführt wurde Wenn Sie ohne Ausführung Query-String bekommen müssen Sie tun Dies. Zum System/database/DB_active_rec.php öffentlich entfernen oder geschützten Stichwort aus diesen Funktionen

public function _compile_select($select_override = FALSE) 
public function _reset_select() 

Jetzt können Sie Abfrage schreiben und es in einer Variablen

$this->db->select('trans_id'); 
$this->db->from('myTable'); 
$this->db->where('code','B'); 
$subQuery = $this->db->_compile_select(); 

Jetzt Abfrage zurückgesetzt erhalten wenn Sie so wollen Um eine weitere Abfrage zu schreiben, wird das Objekt gelöscht.

$this->db->_reset_select(); 

Und die Sache ist erledigt. Prost!!! Hinweis: Während auf diese Weise verwenden, müssen Sie

$this->db->from('myTable') 

statt

$this->db->get('myTable') 

verwenden, die die Abfrage ausgeführt wird.

Take a look at this example

+0

Willkommen und kein Problem! Sie werden diese beiden Methoden (und einige andere zum Einfügen, Aktualisieren und Löschen usw.) in der neuen Version von CI hinzufügen, so dass wir sie nicht hacken müssen. –

+0

@raheelshan das hat gerade mein Leben gerettet. hast du irgendwelche informationen darüber, warum sie diese funktionen geschützt haben? http://stackoverflow.com/questions/9232316/is-there-a-function-like-compile-select-orget-compiled-select – motto

+0

Bitte rufen Sie keine Methode mit '_', was privaten Zugriff bedeutet (nicht von außen). Das ist keine Lösung, sondern ein Problem mit späteren Updates (wenn sie ihren Methoden echte Zugriffsebenen hinzugefügt haben). – Roland