Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Antrieb:Auswählen von Spalten aus Alias-Join-Tabellen

Ich recherchiere ein wenig, nachdem ich jchamberlains Kommentar zu where gelesen habe caluse unter seiner Antwort und ich kam zu dem Schluss, dass

  • Sie sollten immer UpperCamelCase verwenden Stil, wenn Sie Spaltennamen in Antriebsfunktionen eingeben, auch wenn es manchmal gut funktioniert, wenn Sie diesen Stil nicht verwenden
  • Lösung hängt von der Propel-Version ab

Wahrscheinlich gibt es keine Lösung für Propel <=1.6.7 (oder vielleicht ist die rohe SQL-Abfrage die einzige Lösung), denn egal wie sehr ich es versuche, ich endet immer mit Cannot fetch ColumnMap for undefined column: ID_TABLE_B Propel-Ausnahme.

Für Propel>=1.6.8 funktioniert das:

Wenn Sie Array benötigen mit Alias-Spalten als Ergebnis

TableAQuery::create()
  ->useTableBQuery('a')
      // some filters methods
  ->endUse()
  ->useTableBQuery('b')
      // some filters methods
  ->endUse()
  ->select(array('a.Value1', 'b.Value2')) // notice a.value_1 or b.value_2 won't work
  ->find();

Wenn Sie Objekte benötigen mit virtuellen Spalten aus Alias-Spalten

TableAQuery::create()
  ->useTableBQuery('a')
      // some filters methods
  ->endUse()
  ->useTableBQuery('b')
      // some filters methods
  ->endUse()
  ->withColumn('a.Value1') // notice a.value_1 won't work
  ->withColumn('b.Value2') // notice b.value_2 won't work
  ->find();