0

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

我有两张桌子:

Event hasmany Appointments and Appointment belongsto Event

现在我在我的表演EventsController

$this->Event->find('all')

现在我想按预约订购活动。使最早约会的事件在数组中排在第一位,依此类推。我尝试了很多方法,包括可包含、连接、分组、子选择,但没有任何效果。

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

编辑#1:到目前为止,我唯一的解决方案是 $events = $this->Event->find('all', array( 'joins' => array( array( 'table' => '(SELECT event_id, MIN(start ) 从约会开始 GROUP BY event_id)', 'alias' => 'Appointment', 'type' => 'LEFT', 'conditions' => array( 'Event.id = Appointment.event_id' ) ) ), 'order ' => array('Appointment.start ASC' ) ));

但这不是最好的解决方案!

4

1 回答 1

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')));
于 2013-09-27T14:57:54.937 回答