花了几个小时为以下问题找到解决方案后,我希望你能帮助我。
我有两张桌子:
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' ) ));
但这不是最佳解决方案!
答案 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')));