Default sort attribute for Doctrine Model

蹲街弑〆低调 提交于 2019-12-23 07:39:27

问题


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.


回答1:


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



回答2:


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.




回答3:


I don't know the first thing about doctrine, but it looks like you can specify an order by clause when you call create().

http://www.doctrine-project.org/documentation/manual/1_0/en/dql-doctrine-query-language:order-by-clause



来源:https://stackoverflow.com/questions/4810868/default-sort-attribute-for-doctrine-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!