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 开发者_JAVA百科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.
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
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.
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
精彩评论