سؤال

وسأقوم بتحديد السجلات التي هي 1 شهر قديمة أو الأحدث.

ووالاستعلام: SELECT * FROM WHERE foobar created_at> DATE_SUB (curdate ()، INTERVAL 1 شهر)

وعن طريق إدفع في symfony، أفعل:

<اقتباس فقرة>   

و$ ج = معايير جديدة
  $ ج-> إضافة (FoobarPeer :: CREATED_AT "DATE_SUB (curdate ()، INTERVAL 1 شهر)"، معايير :: GREATER_THAN)؛

وماذا إدفع يولد هو: SELECT * FROM foobar WHERE created_at> 'DATE_SUB (curdate ()، INTERVAL 1 شهر) "- وبعبارة أخرى، فإنه يضع وظيفة الخلية في علامات الاقتباس المفردة، مما يجعله (معنى) سلسلة و أحصل على أية سجلات.

وماذا فعلت حتى الآن هو:

<اقتباس فقرة>   

و$ ج-> إضافة (FoobarPeer :: CREATED_AT "created_at> DATE_SUB (curdate ()، INTERVAL 1 شهر)"، معايير :: CUSTOM)؛

ولكن لا أريد لاستخدام الحلول المخصصة إلا إذا لا بد لي من. أي تلميحات إلى جانب استخدام معايير :: CUSTOM؟

هل كانت مفيدة؟

المحلول

وأعتقد أن هناك أي خيار أكثر من استخدام معايير :: 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);

وذلك لأن إدفع يحاول أن يكون DBMS-الملحد، للمساعدة في الهجرة عن طريق القيام تغيير قيمة بسيطة التكوين، لذلك ليس لديها أي DBMS وظائف محددة بنيت فيها

نصائح أخرى

ومجرد استبدال رمز التاريخ الخلية الذي تستخدمه هناك مع متغير فب precalculated الذي لديه هذا التاريخ في ذلك بالفعل.

وأي بمعنى.

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

واضح، يجب عليك حساب حيوي التاريخ في بي، بدلا من الصعب الترميز، ولكن يمكنك الحصول على الصورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top