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