문제

1 개월 또는 새로 인한 레코드를 선택하고 싶습니다.

쿼리는 다음과 같습니다. select * from foobar where where where where where where where where where where where where where> date_sub (curdate (), 1 개월 간격)

Symfony에서 Propel을 사용하여 다음을 수행합니다.

$ c = 새로운 기준
$ c-> add (foobarpeer :: create_at, "date_sub (curdate (), 간격 1 개월", criteria :: Greater_than);

Propel이 생성하는 것은 : select * from foobar where where where where where where where where where where where hate_sub (curdate (), 1 개월 간격) - 즉, mysql 함수를 단일 따옴표에 넣어 (무의미한) 문자열을 만들고 나는 얻지 못합니다. 기록.

내가 지금 한 일은 다음과 같습니다.

$ c-> add (foobarpeer :: create_at, "create_at> date_sub (curdate (), 간격 1 개월", criteria :: custom);

그러나 내가 필요하지 않으면 맞춤형 해결 방법을 사용하고 싶지 않습니다. Criteria :: Custom을 사용하는 것 외에 힌트가 있습니까?

도움이 되었습니까?

해결책

Criteria :: Custom 또는 사용자 정의 SQL 쿼리를 사용하는 것 이상의 옵션이 없다고 생각합니다.

$con = Propel::getConnection(DATABASE_NAME);

$sql = "SELECT foobar.* FROM foobar WHERE created_at > DATE_SUB(curdate(), INTERVAL 1 MONTH)";  
$stmt = $con->prepare($sql);
$stmt->execute();

$books = FoobarPeer::populateObjects($stmt);

Propel은 간단한 구성 값 변경을 수행하여 마이그레이션을 돕기 위해 DBMS-Agnostic이되기 때문에 DBMS 특정 기능이 내장되어 있기 때문입니다.

다른 팁

사용중인 MySQL 날짜 코드를 해당 날짜가 이미있는 미리 계산 된 PHP 변수로 바꾸십시오.

$monthAgo = '2008-10-03';
$c = new Criteria
$c->add(FoobarPeer::CREATED_AT, $monthAgo, Criteria::GREATER_THAN); 

분명히, 당신은 그것을 하드 코딩하는 대신 PHP의 날짜를 동적으로 계산해야하지만, 당신은 그림을 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top