2012-04-04 2 views
0

내 데이터베이스 (mysql) 테이블은 TIMESTAMP 열을 사용하며 쿼리에서 반환 할 때마다 "UNIX_TIMESTAMP (columnname)"로 쿼리하려고합니다.젠드 프레임 워크가 자동으로 쿼리를 변경합니다.

이렇게하려면 zend 프레임 워크에서 어떻게 쿼리를 쉽게 수정합니까?

예를 들어, 현재 코드는 다음과 같습니다

select = $this->select(); 
$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

이 결국됩니다 :

select user_id,name,unix_timestamp(created) where user_id = 42; 
:
select * from tablename where user_id = 42; 

내가 자동으로 타임 스탬프 열을 발견하고 결과 쿼리를 변경 뭔가를 원하는

나는 이것을 달성하기 위해 MySQL보기를 사용할 수 있음을 알고 있지만 차라리 그쪽을 피하고 싶다. 티.

감사합니다.

RR

답변

2

당신은 $ Select 포함>에서() 객체를 사용하여 선택에서 원하는 필드를 지정 할 수 있어야한다.

Zend_Db_Select

이 같은 결과가 발생해야한다.

$select = $this->select(); 

$select->from(
    array('t' => 'tablename'), 
    array('user_id', 'name', 'UNIX_TIMESTAMP(created)') 
); 

$select->where('user_id = ?',$user_id); 
return $this->fetchAll($select); 

제대로 쿼리를 탈출 Zend_Db_Expr() 메소드를 사용하여 함수에 괄호가없는 표현을 실행하고 싶었다면

.

+0

답변 해 주셔서 감사합니다. 예, 명백합니다. 내가 찾고있는 것은 모든 열을 지정하지 않고이를 수행하는 방법입니다. 타임 스탬프가있는 모든 테이블에 대해 PHP 코드에서 열 목록을 유지 관리 할 필요가없는 제네릭 솔루션이 필요합니다. – russellr

+0

아. 미안하다. 그러면 Doctrine2와 같은 것을 살펴 보는 것이 좋습니다. 주석을 사용하여 PHP 클래스를 MySQL로 매핑합니다. 필드에 주석을 추가 한 방법에 따라 올바른 쿼리를 생성합니다. Doctrine2 ORM은 TIMESTAMP MySQL 유형과 PHP DateTime 간의 매핑을 자동으로 지원합니다. 당신이 원한다면 과잉 공격일지도 모르지만, 일단 당신이 그것에 매달린다면 더 쉽게 삶을 살 수 있습니다. http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html –

관련 문제