0

I have:

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

for example:

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

and I do:

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

and I can:

foreach($categories as $category){

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

this show me:

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

but I would like have this sorted ASC by NAME:

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

how can I make it with PROPEL QUERY?

j0k
  • 22,600
  • 28
  • 79
  • 90

3 Answers3

1

It would have been easier if you had mentioned the version of symfony and propel you're using. But here's something that might work hope it helps.

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

Just incase Query doesn't exist, you could use criteria for the purpose.

  $criteria = new Criteria();
  $criteria->addJoin(JobeetJobPeer::CATEGORY_ID, JobeetCategoryPeer::ID)
                        ->addAscendingOrderByColumn(JobeetJobPeer::NAME);
  $categories = JobeetCategoryPeer::doSelect($criteria);
ro ko
  • 2,906
  • 3
  • 37
  • 58
1

I know this is an old question, but wanted to give an updated way to do this. You can pass a query object into your getter:

foreach($categories as $category){
  echo $category->getName();
  $q = JobeetJobQuery::create()->orderByName();
  foreach ($category->getJobeetJobs($q) as $job){
          echo '-' . $job->getName();
  }
}
Jared
  • 113
  • 9
0
$c = new Criteria();
$c->addJoin(JobeetJobPeer::CATEGORY_ID, JobeetCategoryPeer::ID, Criteria::INNER_JOIN);
$c->addAscendingOrderByColumn(JobeetJobPeer::NAME);

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

But jobeet_job do not have a column name. Are you using a custom getter for $job->getName() ?

j0k
  • 22,600
  • 28
  • 79
  • 90