2015-05-19 62 views
2

日期可以用不同的格式表示。一張桌子本身看起來是這樣的:yii2中的兩個日期之間的搜索

book varchar(250) NOT NULL, 
    date INT NOT NULL 

現在我的問題是,我不能在兩個日期之間的範圍內實現搜索。 例如,有5本書的日期不同,但開始日期從 開始於31/12/14,最終日期爲31/02/15。因此,當用戶選擇這些日期之間的範圍時,它必須提供該日期範圍內的所有書籍。

Yii2有什麼辦法可以做到嗎?我找不到任何到目前爲止

UPDATE

我執行不屬於GridView自定義過濾器,它看起來像作爲表外的獨立的盒子。

它看起來像這樣:

<div class="custom-filter"> 

    Date range: 
    <input name="start" /> 
    <input name="end" /> 

    Book name: 
    <input name="book" /> 

</div> 

回答

0

使用Yii2 Active Record並獲得這樣的兩個日期之間的書籍。

public static function getBookBetweenDates($lower, $upper) 
{ 
    return Book::find() 
     ->where(['and', "date>=$lower", "date<=$upper"]) 
     ->all(); 
} 

我假設你正在使用活動記錄類,並且已經創建了Book.php(基於表名稱的合適名稱)作爲模型文件。

+1

好吧,但我提到他們可以以不同的格式!該怎麼辦? – Yang

+0

好的。您可以通過php日期功能將日期轉換爲所需的格式。 –

+0

你可以在存儲爲int(日期) –

10

我相信這是你需要的答案:

$model = ModelName::find() 
->where(['between', 'date', "2014-12-31", "2015-02-31" ])->all(); 
1

如果你得到啓動和日期格式結束,但迄今在數據庫中的表是INT類型,你必須做這樣的事情:

//Get values and format them in unix timestamp 
$start = strtotime(Yii::$app->request->post('start')); 
$end = strtotime(Yii::$app->request->post('end')); 

//Book name from your example form 
$bookName = Yii::$app->request->post('book'); 

//Then you can find in base: 
$books = Book::find() 
    ->where(['between', 'date', $start, $end]) 
    ->andWhere(['like', 'book', $bookName]) 
    ->all(); 

不要忘記驗證從帖子中給出的值。