Cakephp通过相关模型查找订单

时间:2013-09-21 20:49:06

标签: group-by sql-order-by left-join cakephp-2.3

花了几个小时为以下问题找到解决方案后,我希望你能帮助我。

我有两张桌子:

Event hasmany Appointments and Appointment belongsto Event

现在我在我的EventsController

中表演
$this->Event->find('all')

现在我想通过约会订购活动。因此,具有最早约会的事件是阵列中的第一个,依此类推。我尝试了很多方法,包括Containable,Joins,Grouping,Subselect,但没有任何作用。

$this->Event->Appointment上执行查找('all')不是解决方案,因为我希望每个事件都是一个。

编辑#1: 到目前为止我唯一的解决办法是     $ events = $ this-> Event-> find('all',array(         'joins'=>阵列(             阵列(                 'table'=> '(SELECT event_id,MIN(start)start FROM appointmentments GROUP BY event_id)',                 'alias'=> '约定',                 'type'=> '剩下',                 'conditions'=>阵列(                     'event.id = Appointment.event_id'                     )                 )             )         'order'=>阵列(             'Appointment.start ASC'             )         ));

但这不是最佳解决方案!

1 个答案:

答案 0 :(得分:0)

一个选项是创建一个虚拟字段,表示您可以按

排序的最早约会日期

将其放入您的活动模型中:

function __construct($id = false, $table = null, $ds = null) {
    $this->virtualFields['firstappt'] = 'SELECT MIN(Appointment.created) FROM appointments AS Appointment WHERE Appointment.event_id = Event.id';
    parent::__construct($id, $table, $ds);
}

您应该可以在控制器中使用此代码:

$this->Event->find('all',array('order' => array('firstappt')));