我有以下关联:
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个,所以它们可能恰好是为了开始)。
谁能告诉我我在这里做错了什么?如何按降序排序?
谢谢!
答案 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';
到目前为止似乎正在运作!