Mysql
 sql >> Base de données >  >> RDS >> Mysql

Propel :sélection de colonnes à partir de tables de jointure avec alias

Je fais une petite recherche après avoir lu le commentaire de jchamberlain sur where caluse sous sa réponse et j'en suis venu à la conclusion que

  • vous devez toujours utiliser UpperCamelCase style lorsque vous tapez des noms de colonnes dans les fonctions propel, même si cela fonctionne parfois bien si vous n'utilisez pas ce style
  • la solution dépend de la version de Propel

Il n'y a probablement pas de solution pour Propel <=1.6.7 (ou peut-être que la requête SQL brute est la seule solution), car peu importe combien j'essaie, je me retrouve toujours avec Cannot fetch ColumnMap for undefined column: ID_TABLE_B Propulser l'exception.

Pour Propel>= 1.6.8, cela fonctionnera :

Si vous avez besoin d'un tableau avec des colonnes aliasées comme résultat

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();

Si vous avez besoin d'objets avec des colonnes virtuelles à partir de colonnes aliasées

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();