2016-12-02 8 views
0

このオブジェクトを変更して過去100日間のエントリのみを返す必要がありますが、毎日のエントリがないため、余分な日付を除外するためにはさらに洗練されたものが必要です。フィルタリングMySQLの日付範囲による返信

現在のオブジェクト:

$obj = YearToDate::get()->sort('ID', 'DESC')->limit(100); 

は、オブジェクト定義で作成された日付でフィルタリングすることが可能ですか?または、フィルタリングを処理する関数を作成する必要がありますか?ここで

クラスです:

class YearToDate extends DataObject { 

// Create DB fields 
private static $db = array(
    'Inches' => 'Text' 
); 

// Assign Weather to Weather 
private static $belongs_many_many = array(
    'Weather' => 'Weather' 
); 

// Summary fields to show in gridfield 
private static $summary_fields = array(
    'Created' => 'Date', 
    'Inches' => 'Inches' 
); 

public function getCMSFields() { 
    $fields = parent::getCMSFields(); 

    // Remove Fields 
    $fields->removeByName('Weather'); 

    // Add DB fields to CMS tabs 
    $fields->addFieldToTab('Root.Main', new TextField('Inches','Inches')); 

    return $fields; 
} 

// Required Fields 
function getCMSValidator() { 
    return new RequiredFields(array('Inches')); 
} 

} 
+1

使用しているデータベースライブラリ(ORM /クエリビルダー)を追加してください。 –

+1

'YearToDate'がクラスである場合は、コードを投稿する必要があります。 –

+0

ここにORMがありませんか? – WillardSolutions

答えて

2

あなたは根本的なRDBMSとしてMySQLを使用している場合は、最後の100日からエントリを照会するためにMySQL date functionsを使用することができます。このような

何か作業をする必要があります:

$list = YearToDate::get() 
    ->sort('Created', 'DESC') 
    ->where('"Created" >= DATE_SUB(NOW(), INTERVAL 100 DAY)') 

だから、これが何をするのか、現在の時刻(NOW())から100日削除とCreated日付と比較されます。 Createdが大きい場合は、100日未満です。

厳密には過去100日間のフィルタリングが行われるため、1日あたりのエントリ数または1日あたりの複数のエントリ数がない場合、結果が100件を下回るか、または100を超えることがあります。

関連する問題