Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default sort attribute for Doctrine Model

I was wondering if there is a way to declare the default order for my doctrine models.

e.g.

I have a work model and it has photos. When I load a work, all photos associated to it get loaded into $work->photos. When I display them, they are ordered by their IDs.

It would be very convenient to declare a default order on another field or perhaps override the fetch behaviour altoghether.

I'd rather not to convert the photos to an array and use usort. Thanks.

like image 529
Nacho Avatar asked Jan 26 '11 22:01

Nacho


2 Answers

You can specify it in the YAML as follows:

If it's a sorting order for a field in the table itself add:

options:
  orderBy: fieldname

where options: is at the same depth as you'd have a columns: or relations: entry. NB: The capitalisation of orderBy: is vital; get it wrong and you'll get no error but also no sorting.

If it's a sorting order for a relationship then, within the relationship you can skip the options: part and just put in:

orderBy: fieldname
like image 172
borrible Avatar answered Oct 28 '22 00:10

borrible


OK, I got around this thanks to this post: http://www.littlehart.net/atthekeyboard/2010/02/04/sorting-relationship-results-in-doctrine-1-2-2/

In my case, the BaseWork.php file had this modifications:

public function setUp()
    {
        parent::setUp();
        $this->hasMany('Photo as photos', array(
             'local' => 'id',
             'orderBy' => 'display_order',
             'foreign' => 'work_id'));

Anyhow, it would be better to specify this in schema.yml, which I couldn't make work.

like image 34
Nacho Avatar answered Oct 27 '22 23:10

Nacho