2009-08-24 17 views
1

Ich arbeite an einem Active Record Muster (ähnlich RoR/Cake) für meine Zend Framework Bibliothek. Meine Frage ist: Wie finde ich heraus, ob ein ausgewähltes Objekt einen Alias ​​für eine Tabelle verwendet oder nicht?Hole Tabellenalias von Zend_Db_Table_Select

$select->from(array("c" => "categories")); 

gegen

$select->from("categories"); 

und ich gehe dies auf eine Funktion „holen“, die verbindet und so weiter zusätzlich fügt automatisch die Zeilen Beziehungen zu bekommen ... Ich möchte einige benutzerdefinierte SQL hinzufügen ; Entweder "c.id" oder "categories.id" basierend darauf, wie der Benutzer die "from" -Methode verwendet hat.

Ich weiß, ich

$parts = $select->getPart(Zend_Db_Select::FROM); 

kann die aus Daten als Array zu erhalten, und der Tabellenname oder Alias ​​scheint in „Schlitz“ 0 des Feldes zu sein. Befindet sich der Tabellenname oder Alias ​​immer im Slot Null? d. h. kann ich zuverlässig verwenden:

$tableNameOrAlias = $parts[0]; 

Sorry, wenn dies Konvolut ist, aber hoffe, Sie können helfen! :)

+0

Nur ein Hinweis, der richtige Name für das, was Sie "Slot" nennen, ist hier _index_. So ist Array [0] der Index 0, Array ['c'] ist der Index 'c'. – Fractalizer

Antwort

1

Logischerweise würde ich denken, das ist, wie es funktionieren sollte. Um auf der sicheren Seite zu sein, bauen Sie einige Dummy-Abfragen mit einem Select() auf und geben Sie das Teile-Array mit print_r oder ähnlichem ab.

ich diesen Test nur durchgeführt wird, ist der Alias ​​der Array-Schlüssel, ist es nicht eine Null-basierte numerische Array:

$select = $this->db->select()->from(array("c" => "categories","d" => "dummies")); 
    $parts = $select->getPart(Zend_Db_Select::FROM); 
    echo '<pre>'; 
    print_r($parts); 
    echo '</pre>'; 

Ausgang:

Array 
(
    [c] => Array 
     (
      [joinType] => inner join 
      [schema] => 
      [tableName] => categories 
      [joinCondition] => 
     ) 

) 

Sie müssen also wäre es verweisen als $part["c"]

+0

Hmm, das ist nett, aber mein Problem ist, ich weiß nicht, ob der Benutzer ein Auswahlobjekt mit einer Alias-Tabelle oder nur dem Tabellennamen übergeben wird, so dass ich nicht wie $ part ["c"] darauf verweisen kann. Vielleicht kann ich einfach die [c] mit dem Schlüssel von PHP ($ Array) greifen? – typeoneerror

+0

Schön, ja! Ich denke, das kommt irgendwo hin. $ parts = array ("c" => array ("tabellenname" => "kategorien")); Echokey ($ Teile); Gibt mir den Alias-Namen. Müssen Sie nur die Teile von dann durchlaufen und greifen Sie die Schlüssel und verwenden Sie diese. Danke für Ihre Hilfe! – typeoneerror