One of my result classes has a rel ordered by a related column:

__PACKAGE__->has_many(
    "entries",
    "NAC::Model::DBIC::Table::Patch_Interface",
    'fk_patch_request',
    { order_by => 'row_index' },
);

The following code used to sort by entries.row_index but doesn't any more:

my $request = $rs->find( $id, { prefetch => [
            'rel_accept',       'rel_req_status',
            'rel_req_customer', 'view_version',
            'entries',
        ],
    });

This is the resulting SQL. It does an order by but on the primary key of the 
result class:

SELECT me.id_patch_request, me.req_id, me.req_desc, me.req_dn, me.req_name, 
me.req_email, me.dst_kst_ktr, me.req_datetime, me.accept, me.accept_datetime, 
me.accept_agent, me.req_status, me.req_status_datetime, me.req_agent, 
me.agent_comment, me.req_customer, me.req_comment, rel_accept.id_bool_vals, 
rel_accept.bool_val_name, rel_req_status.id_fw_status, 
rel_req_status.status_name, rel_req_customer.id_customer, 
rel_req_customer.customername, rel_req_customer.create_datetime, 
rel_req_customer.create_user, rel_req_customer.update_datetime, 
rel_req_customer.update_user, view_version.id_patch_request, 
view_version.version, entries.fk_patch_request, entries.row_index, 
entries.hostid, entries.fk_location, entries.rack, entries.fk_patch_conn_type, 
entries.fk_ip_net, entries.want_ipv4, entries.ipaddr, entries.want_ipv6, 
entries.ipv6, entries.fqdn, entries.cable_id
  FROM patch_request me
  LEFT JOIN bool_vals rel_accept
    ON rel_accept.id_bool_vals = me.accept
  JOIN fw_status rel_req_status
    ON rel_req_status.id_fw_status = me.req_status
  JOIN customer rel_req_customer
    ON rel_req_customer.id_customer = me.req_customer
  JOIN view_patch_request_version view_version
    ON view_version.id_patch_request = me.id_patch_request
  LEFT JOIN patch_interface entries
    ON entries.fk_patch_request = me.id_patch_request
WHERE me.id_patch_request = '9569'
ORDER BY me.id_patch_request

I worked around it by adding the order_by to the calling find:

my $request = $rs->find( $id, { prefetch => [
            'rel_accept',       'rel_req_status',
            'rel_req_customer', 'view_version',
            'entries',
        ],
        order_by => 'entries.row_index',
    });

which produces this SQL as expected:

SELECT me.id_patch_request, me.req_id, me.req_desc, me.req_dn, me.req_name, 
me.req_email, me.dst_kst_ktr, me.req_datetime, me.accept, me.accept_datetime, 
me.accept_agent, me.req_status, me.req_status_datetime, me.req_agent, 
me.agent_comment, me.req_customer, me.req_comment, rel_accept.id_bool_vals, 
rel_accept.bool_val_name, rel_req_status.id_fw_status, 
rel_req_status.status_name, rel_req_customer.id_customer, 
rel_req_customer.customername, rel_req_customer.create_
datetime, rel_req_customer.create_user, rel_req_customer.update_datetime, 
rel_req_customer.update_user, view_version.id_patch_request, 
view_version.version, entries.fk_patch_request, entries.row_index, 
entries.hostid, entries.fk_location, entries.rack, entries.fk_patch_conn_type, 
entries.fk_ip_net, entries.want_ipv4, entries.ipaddr, entries.want_ipv6, 
entries.ipv6, entries.fqdn, entries.cable_id
  FROM patch_request me
  LEFT JOIN bool_vals rel_accept
    ON rel_accept.id_bool_vals = me.accept
  JOIN fw_status rel_req_status
    ON rel_req_status.id_fw_status = me.req_status
  JOIN customer rel_req_customer
    ON rel_req_customer.id_customer = me.req_customer
  JOIN view_patch_request_version view_version
    ON view_version.id_patch_request = me.id_patch_request
  LEFT JOIN patch_interface entries
    ON entries.fk_patch_request = me.id_patch_request
WHERE me.id_patch_request = '9569'
ORDER BY entries.row_index

--
Cheers, Alex


*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
T-Systems Austria GesmbH Rennweg 97-99, 1030 Wien
Handelsgericht Wien, FN 79340b
*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
Notice: This e-mail contains information that is confidential and may be 
privileged.
If you are not the intended recipient, please notify the sender and then
delete this e-mail immediately.
*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk

Reply via email to