2013-09-21 2 views
0

Проведя несколько часов, чтобы найти решение для следующей проблемы, я надеюсь, вы сможете мне помочь.CakePHP найти заказ у соответствующей модели

У меня есть две таблицы:

Event hasmany Appointments and Appointment belongsto Event 

Сейчас я выступаю в моем EventsController:

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

Теперь я хочу заказать события по назначениям. Чтобы событие с самым ранним назначением было первым в массиве и так далее. Я пробовал много способов, с Containable, Joins, Grouping, Subselects, но ничего не работает.

Выполнение поиска ('все') на $this->Event->Appointment не является решением проблемы из-за того, что я хочу, чтобы каждое событие было только одним.

Edit # 1: Мое единственное решение до сих пор было $ событий = $ this-> событийно> найти ('все', массив ( 'присоединяется' => Array ( массив ( 'стол' = > '(SELECT event_id, MIN (start) start FROM назначений GROUP BY event_id)', 'alias' => 'Назначение', 'type' => 'LEFT', 'conditions' => array ( 'Event .id = Appointment.event_id» ) ) ), 'заказать' => массив ( 'Appointment.start ASC' ) ));

Но это не лучшее решение!

ответ

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'))); 
+0

Это работает как шарм! Благодаря! –

Смежные вопросы