실행 된 쿼리를 응용 프로그램 로그에 기록하고 검토 할 수 있습니다. 설정 파일에 이런 식으로 뭔가 : 어떤 경우에는
'components' => array(
'db'=>array(
'enableParamLogging' => true,
),
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace,log',
'categories' => 'system.db.CDbCommand',
'logFile' => 'db.log',
),
),
),
);
(예를 들어, 테스트를 실행하는 경우), 당신은 또한 작동이에 대한 프로세스의 마지막에 Yii::app()->log->processLogs(null);
를 호출해야합니다.
물론 로그 된 메시지와 다른 뭔가를하는 자체 로그 경로를 작성하지 않아도되지만 요청이 끝날 때 (또는 processLogs
에 전화 할 때) 로그가 처리된다는 것을 염두에 두지 마십시오. , 당신이 뭔가를 기록 할 때마다 아닙니다.
그런데 쿼리에서 동적 입력 권한을 사용하여 이와 같은 쿼리를 작성하면 안됩니다. 대신 사용 바인드 변수 :
$criteria = new CDbCriteria();
$criteria->condition = 't.date BETWEEN :from_date AND :to_date';
$criteria->params = array(
':from_date' => $from_date,
':to_date' => $to_date,
);
$criteria->with = array('order');
$orders = ProductOrder::model()->findAll($criteria);
직접적인 SQL 명령을 사용하는 DAO가 CDbcriteria를 사용하는 것보다 훨씬 간단하고 빠릅니다. – itachi
결과에 따라 원하는 결과에 따라 달라집니다. 모델 기능 (예 : 유효성 검사)을 사용하려면 AR을 사용하는 것이 좋습니다. 개인적으로, 나는 AR을 선호하고, DAO는 join과 관련된 업데이트와 같은보다 복잡한 상황에서만 사용한다. 이렇게하면 공통 조건에 모델 범위를 사용할 수 있으며 스키마 또는 비즈니스 논리가 변경 될 때 직접 명령을 모두 검토/업데이트하지 않아도됩니다. (또한 모든 곳에서 AR을 사용하면 결과 행이 객체 또는 배열인지 걱정할 필요없이 결과에 포함 된 데이터에 일관된 방법으로 액세스 할 수 있습니다.) – DCoder
귀하의 요점이 있습니다. 설명을 위해 고맙습니다. – itachi