2012-08-01 66 views
0

我:排序中关系推进

# config/schema.yml 
propel: 
    jobeet_category: 
    id:   ~ 
    name:   { type: varchar(255), required: true, index: unique } 

    jobeet_job: 
    id:   ~ 
    category_id: { type: integer, foreignTable: jobeet_category, foreignReference: id, required: true } 
    type:   { type: varchar(255) } 
    company:  { type: varchar(255), required: true } 

例如:

JobeetCategory: 

id | name 
1 | first 
2 | second 

JobeetJob: 

id | category_id | name 
1 | 1   | bbb 
2 | 1   | ccc 
3 | 1   | aaa 
4 | 2   | zzz 
5 | 2   | xxx 

和我做的:

$c = new Criteria(); 
$categories = JobeetCategoryPeer::doSelect($c); 

,我可以:

foreach($categories as $category){ 

    echo $category->getName(); 
    foreach ($category->getJobeetJobs() as $job){ 
      echo '-' . $job->getName(); 
    } 
} 

这样告诉我:

first 
- bbb 
- ccc 
- aaa 
second 
- zzz 
- xxx 

但我想有这样的排序ASC by NAME

first 
- aaa 
- bbb 
- ccc 
second 
- xxx 
- zzz 

我怎样才能使它与Propel查询语句?

+0

您正在使用哪种版本的propel(以及哪种版本的symfony)? – j0k 2012-08-01 13:54:30

+0

这是symfony 1.2。 Propel <1.6 – 2012-08-01 14:10:37

回答

1

如果您提到了symfony的版本并推动您使用,那会更容易。但是,这可能有用,希望它有所帮助。

$categories = JobeetCategoryQuery::create() 
          ->addJoin(JobeetJobPeer::CATEGORY_ID, JobeetCategoryPeer::ID) 
          ->addAscendingOrderByColumn(JobeetJobPeer::NAME) 
          ->find(); 

Just incase Query does not exist,you can use criteria for the purpose。

$criteria = new Criteria(); 
    $criteria->addJoin(JobeetJobPeer::CATEGORY_ID, JobeetCategoryPeer::ID) 
         ->addAscendingOrderByColumn(JobeetJobPeer::NAME); 
    $categories = JobeetCategoryPeer::doSelect($criteria); 
+0

这类CATEGORY。我想排序JOB – 2012-08-01 14:10:17

+0

oops!我的错误检查编辑请 – 2012-08-01 14:34:51

+0

我不认为'JobeetCategoryQuery'存在于Propel 1.3中 – j0k 2012-08-01 14:36:00

0
$c = new Criteria(); 
$c->addJoin(JobeetJobPeer::CATEGORY_ID, JobeetCategoryPeer::ID, Criteria::INNER_JOIN); 
$c->addAscendingOrderByColumn(JobeetJobPeer::NAME); 

$categories = JobeetCategoryPeer::doSelect($c); 

jobeet_job没有列name。您是否使用$job->getName()的自定义吸气器?

+0

这不工作:( – 2012-08-01 14:23:02

1

我知道这是一个古老的问题,但想给一个更新的方式来做到这一点。您可以将查询对象传递给您的获取者:

foreach($categories as $category){ 
    echo $category->getName(); 
    $q = JobeetJobQuery::create()->orderByName(); 
    foreach ($category->getJobeetJobs($q) as $job){ 
      echo '-' . $job->getName(); 
    } 
}