CakePHP - 在深度关联的字段上排序

时间:2014-05-28 16:13:52

标签: cakephp

我有以下关联:

Invoiceitem belongsTo Invoice Invoice属于Supplier

我想根据各种条件检索Invoiceitems,但能够对供应商名称进行排序。

到目前为止,我有:

$this->Invoiceitem->Invoice->belongsTo['Supplier']['order'] = "Supplier.name " . $direction;
$itemlist = $this->Invoiceitem->find('all', array(
    'conditions' => $conditions,
    'contain' => array('Invoice' => array('Supplier')),
));

这似乎不起作用 - 我得到的结果似乎是按供应商名称升序排序,但如果我按降序排序,它就没有任何区别。我认为这些名字按顺序排列的事实可能只是巧合(我只有3个,所以它们可能恰好是为了开始)。

谁能告诉我我在这里做错了什么?如何按降序排序?

谢谢!

2 个答案:

答案 0 :(得分:1)

我发现深度操作在包容性方面不能很好地工作,所以我经常使用手动连接。但是在这种情况下,您可以通过执行以下操作来强制执行此操作,因为如果您选择CakePHP无法解析,则它只是默认将不可解析的部分直接插入到查询中。

$itemlist = $this->Invoiceitem->find('all', array(
     'conditions' => $conditions,
     'contain' => array('Invoice' => array('Supplier')),
     'order' => 'Supplier.name desc, Invoiceitem.id asc',
));

答案 1 :(得分:0)

我最终通过设置虚拟字段解决了这个问题:

$this->Invoiceitem->virtualFields['supplierName'] = 
    'SELECT name FROM suppliers s JOIN invoices i ON s.id = i.supplier_id 
      WHERE i.id=Invoiceitem.invoice_id';

到目前为止似乎正在运作!