使用Propel ORM获取按条件分组的加入结果

时间:2016-05-12 01:07:12

标签: php symfony propel silex

我试图让一些推进对象填充一些联合数据。

问题:

我有2个表,我们称它们为表a和表b,表A是表B的父表,关系是一对多,其中一个父表可以有多个子表。

我想对子表执行查询,并获取其父项,并按父ID对结果进行分组,以便稍后我可以将每个子项打印到html中的父选项卡中。

这是我的架构

<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>

我一直在阅读很多没有太多运气的东西,说实话,我没有做太多的测试,因为我似乎没有办法解决这个问题。

<?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
            )
        );
}

还尝试了其他方法来构建查询,没有骰子。

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

整个想法是让每个孩子按每个父母分组,所以如果我有3个父母,每个父母都有1到N个孩子,那么我可以用html打印,每个父母作为标签和它的孩子作为每个标签的内容。

如果我要查询每个父项,那么可以使用useCountriesQuery() - &gt; filterById(ID-HERE),但我想在一次扫描中使用它。

有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:0)

好吧我找到了一个不同的查询解决方案。     leftJoinWithBanks(&#39; Banks.CountryId&#39;)              - &GT; orderById()              - &GT;发现(); 通过查询加入银行的国家,我得到了我需要的信息,所以这很有用。