2015-10-22 33 views
1

好的,我卡住了,真的需要幫助請。如何獲得數據透視表給定日期範圍內的最後一個條目

這是設置:

1)表中的項目:ID,名稱

2)表狀態:ID,標題

3)表ITEM_STATUS:ID,ITEM_ID,STATUS_ID,created_at

項目模式有關係:

public function statuses(){ 
    return $this->belongsToMany('Status')->withTimestamps(); 
} 

現在,我想要的物品無線個最新狀態「7」或「9」,和二零一五年十月十九日二○一五年十月二十日 最接近我得到之間產生是:

$items = Item::with('statuses')->whereHas('statuses', function ($q) { 
             $q->where('created_at','>=','2015-10-19'); 
             $q->where('created_at','<','2015-10-20'); 
             $q->whereIn('status_id',array('7','9')); 
            } 
        ); 

問題是,這是不工作的權利。 它給出了在該日期範圍內獲得其中一個status_id的所有項目。 因此,如果項目在2015-10-19獲得狀態「7」,並且例如2015-10-22的狀態爲「11」,則會導致結果。我想在該日期範圍中只有項目具有最新(最新)狀態「7」或「9」。

更新: 例如:表ITEM_STATUS

item_id status_id created_at 
1   1  2015-10-06 
1   3  2015-10-07 
2   6  2015-10-07 
2   3  2015-10-08 
2   5  2015-10-09 

如果設置了過濾器爲:STATUS_ID = 3和時間範圍2015年10月6日至2015年10月9日:我想僅第1項,因爲在特定時期的ITEM 2有另一個更新的狀態(5)

請幫忙! TNX Ÿ

回答

0

您需要添加->withTimestamps()功能的關係,當你使用時間戳列

例:

public function statuses(){ 
    return $this->belongsToMany('Status')->withTimestamps(); 
} 
+0

好了,這是事實。我編輯了問題,但這還不夠。我仍然可以得到在給定時間內給出狀態的所有項目,而不僅僅是那個時期給出狀態爲最後一項的項目。 – Yuray

相關問題