2016-05-12 1 views
0

J'essaie d'obtenir des objets propulsés avec des données communes.Obtenez les résultats des ventes groupées par condition avec Propel ORM

le problème:

J'ai 2 tables, permet de les appeler et une table de tableau b, tableau A est un parent à la table B, la relation est un à plusieurs, où l'un des parents peut avoir de nombreux enfants. Je souhaite effectuer une requête sur la table des enfants, obtenir ses parents, et regrouper les résultats par l'ID parent, afin que je puisse les imprimer plus tard dans l'onglet parent en html.

Voici mon schéma

<table name="countries"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" /> 
    <column name="name" type="VARCHAR" size="128" required="true" /> 
    <column name="country_code" phpName="CountryCode" type="VARCHAR" size="7" required="true" /> 
    <column name="status" phpName="Status" type="BOOLEAN" required="true" defaultValue="false" /> 

    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
</table> 

<table name="banks"> 
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" /> 
    <column name="name" phpName="Name" type="VARCHAR" size="128" required="true" /> 
    <column name="status" phpName="Status" type="BOOLEAN" required="true" defaultValue="false" /> 
    <column name="country_id" phpName="CountryId" type="INTEGER" required="true" /> 

    <foreign-key foreignTable="countries" phpName="Countries" onDelete="setnull" onUpdate="cascade"><!-- country parent --> 
     <reference local="country_id" foreign="id" /> 
    </foreign-key> 

    <behavior name="timestampable" /> 
    <behavior name="soft_delete" /> 
</table> 

J'ai lu beaucoup sans beaucoup de chance, et pour être honnête, je nai pas fait beaucoup moi-même le test que je ne semble me sortir de cela.

<?php 
public function banks(Application $app) 
{ 
    $banks = BanksQuery::create() 
     ->where('banks.status = ?', true) 
     ->find(); 
    $nav_options = $this->getNav($app); 
    $admin_level = false; 
    return $app['twig']->render('admin/banks.twig', array 
     (
      'admin_level' => $admin_level, 
      'nav_options' => $nav_options, 
      'banks' => $banks 
      ) 
     ); 
} 

Vous avez également essayé d'autres méthodes pour générer la requête, sans aucun dé.

<?php 
$banks = BanksQuery::create() 
     ->orderByCountryId() 
     ->joinWithCountries('banks.country_id') 
     ->where('banks.status = ?', true) 
     ->find(); 

L'idée est d'obtenir tous les enfants, regroupés par tous les parents, donc si je 3 les parents et chacun des parents ont entre 1 à enfants N, je peux alors obtenir d'imprimer en html, chaque parent comme onglet et ses enfants en tant que contenu pour chaque onglet. Si je devais interroger chaque parent, c'est possible avec useCountriesQuery() -> filterById (ID-HERE) mais je veux avoir ceci sur un seul balayage.

Existe-t-il un moyen de faire ce que je veux?

Répondre

0

ok j'ai trouvé une solution en faisant la requête différemment. leftJoinWithBanks ('Banks.CountryId') -> orderById() -> find(); En interrogeant les pays avec une jointure dans les banques, j'obtiens l'information dont j'ai besoin, alors cela fonctionne.