2015-08-07 2 views
1

Я пытаюсь работать с cakephp virtualFields в cakephp 1.3. Мой запрос sql выглядит следующим образом, но мне нужно, чтобы day_index (мои виртуальные поля) был «DAYOFWEEK (start_date)».cakephp Виртуальное поле в SQL-запросе

мне нужно переписать запрос

$data = $this->Calendar->query("SELECT *, DAYOFWEEK(start_date) as day_index, TIME(start_time) as time 
    FROM calendars WHERE calendar_category_id =$cal ORDER BY day_index, time"); 

в этот формат:

$sqlConditions = array("Calendar.calendar_category_id"=>$cal); 
$sqlOrderBy = array("Calendar.day_index", "Calendar.time asc"); 
$sqlParams = array('conditions'=>$sqlConditions,'order'=>$sqlOrderBy); 
$data = $this->Calendar->find('all',$sqlParams); 
$this->set('data',$data); 

Так что я не знаю, как/где поставить или объявить виртуальное поле.

$fields = $this->Calendar->virtualFields['day_index'].'AS 'DAYOFWEEK(start_date)'; 

ответ

0

Найдено 2 способа сделать это, не уверен, что один лучше другого. контроллер редактировать единственный метод

$sqlFields = array("DAYOFWEEK(Calendar.start_date) as day_index", 
    "TIME(Calendar.start_time) as time", 
    "Calendar.start_date", 
    "Calendar.calendar_category_id", 
    "Calendar.start_time"); 
    $sqlConditions = array("Calendar.calendar_category_id"=>$cal); 
    $sqlOrderBy = array("Calendar.day_index, Calendar.time asc"); 
    $sqlParams = array('fields'=>$sqlFields,'conditions'=>$sqlConditions,'order'=>$sqlOrderBy); 
    $data = $this->Calendar->find('all',$sqlParams); 
    return $data; 
    exit(); 

метод модель с редактирует в контроллер на основе этого метода модели>

var $virtualFields = array( 
    'day_index' => "DAYOFWEEK(Calendar.start_date)", 
    'time' => "TIME(Calendar.start_time)" 
); 
var $displayIndex = 'day_index'; 
var $displayTime = 'time'; 

Контроллер>

$sqlConditions = array("Calendar.calendar_category_id"=>$cal); 
    $sqlOrderBy = array("Calendar.day_index, Calendar.time asc"); 
    $sqlParams = array('conditions'=>$sqlConditions,'order'=>$sqlOrderBy); 
    $data = $this->Calendar->find('all',$sqlParams); 
    return $data; 
    exit(); 
Смежные вопросы