2016-04-04 2 views
1

Je me demande si vous pouvez rendre dynamique le nom de table de la requête propel (un peu comme une variable variable)? Un exemple serait comme \ "DynamicVar" Query :: create(). Je l'ai travaillé dans ifs comme dans mon exemple ci-dessous, mais pourrait se débarrasser de quelques lignes si elle est faite plus dynamiquement. Les tables sont toutes configurées de la même manière, de sorte qu'elles peuvent être traitées comme le même objet, elles ont simplement des noms différents.Nom de la table dynamique dans la requête Propel

ont actuellement quelque chose comme cela se produise:

//$dynamic is a result of grabbing it from a different table 
//that corresponds to values passed by AJAX 
$dyanmic = "Customer" 
$query = null; 
If($dynamic == "Customer") $query = \CustomerQuery()::create(); 
If($dynamic == something2) $query = \Table2Query()::create(); 
If($dynamic == something3) $query = \Table3Query()::create(); 

If($query != null) { 
    $query->filterBy("something"); 
    $query->find(); 
} 

Répondre

0

J'ai joué avec le code certains, et le code ci-dessous fonctionnera pour changer dynamiquement la table aussi longtemps que chaque table peut être traité comme le même objet. Vous pouvez définir votre table $ et l'utiliser de cette manière pour une fonction qui renvoie l'objet que vous voulez

function Get_Table($table,$id){ 
    $query = null; 
    $queryClass = '\\'. ucfirst($table) . 'Query'; 
     if (class_exists($queryClass)) { 
      $$dynamics = $queryClass::create() 
       ->filterById($id) 
       ->find(); 

      if($dynamics->getFirst() == null) { return false; } 
      /** @var \Base\.ucfirst($table) $dynamic*/ 
      $dynamic= $dynamics->getFirst(); 

      return $dynamic; 
     } 

     //On Failure 
     else { 
      return false; 
     } 
}