내 조건에서 SQL 함수 NOW()를 사용하여 찾기 작업을 수행하는 데 문제가 있습니다.CakePHP - 찾기 조건에서 SQL NOW()를 사용하는 방법
나는 효과적으로라는 찾기 쿼리를 작성하는 것을 시도하고있다 :
원하는 SQL : 나는 상관없이 현재 사용 때 내가 뭘()는 많은 조합을 시도했지만 한
WHERE (NOW() BETWEEN Promotion.start AND Promotion.end) AND Promotion.active = 1
조건에 따라 Cake 빌드 쿼리는 모델 필드 주위에 '
따옴표를 넣기 때문에 MySQL에서 문자열로 해석되므로 작동하지 않습니다.
$this->find('all', array(
'conditions' => array(
'(NOW() BETWEEN ? AND ?)' => array('Promotion.start', 'Promotion.end'),
'Promotion.active' => 1
)
));
는 CakePHP의는 SQL 생성 :
공지 사항 (사이에서 모델 필드 주위에 따옴표), 그래서 그들은 문자열로 처리됩니다.
는WHERE (NOW() BETWEEN 'Promotion.start' AND 'Promotion.end') AND `Promotion`.`active` = '1'
이 중 하나가 작동하지 않습니다.
$this->find('all', array(
'conditions' => array(
'NOW() >=' => 'Promotion.start',
'NOW() <=' => 'Promotion.end',
'Promotion.active' => 1
)
));
왜 이러한 해결책이 효과가 없는지 알고 있습니다. 모델 필드가 배열 값이 아닌 조건의 배열 키인 경우에만 모델 필드가 처리되기 때문입니다.
$this->find('all', array(
'conditions' => array(
'NOW() BETWEEN Promotion.start AND Promotion.end',
'Promotion.active' => 1
)
));
을하지만 난 SQL 주입에 대한 케이크의 보호의 혜택을받지 못했습니다 :
나는 난 그냥 문자열로() 조건 사이의 전체를 넣을 경우이 작업을 얻을 수 있습니다 알고 있습니다.
같은 문제의 또 다른 예는 간단하다,이다는 이해하기 :
원하는 SQL을 :
$this->find('all', array(
'conditions' => array(
'Promotion.start >' => 'NOW()',
'Promotion.active' => 1
)
));
그리고 :
WHERE Promotion.start > NOW() AND Promotion.active = 1
그래서 나는이 시도 케이크가 '
qu을 넣기 때문에 다시는 작동하지 않습니다. NOW() 부분 주위에.
CakePHP에서 만든 SQL :
WHERE `Promotion`.`start` > 'NOW()' AND `Promotion`.`active` = '1''
함수가 인덱스를 사용하지 않는다는 것은 무엇을 의미합니까? – BadHorsie
MySQL은 함수 기반 인덱스를 지원하지 않습니다. 쿼리에 함수 또는식이 포함되어 있으면 인덱스를 사용할 수 없습니다. 전체 테이블 스캔을 수행해야합니다. 설명이 확장 된 상태에서 사용해보고 사용하지 않는 인덱스를 확인하십시오 ;-) – RichardAtHome