как получить последнюю запись в заданном диапазоне дат из сводной таблицы

Хорошо, я застрял, и мне действительно нужна помощь, пожалуйста.

это настройка:

1) элементы таблицы: id, name

2) статусы таблицы: id, title

3) таблица item_status: id, item_id, status_id, created_at

модель элемента имеет отношение:

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

Теперь мне нужны предметы с ПОСЛЕДНИМ статусом '7' или '9', созданные в период с 2015-10-19 по 2015-10-20. Ближайшее, что я получил, это:

$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 в этом диапазоне дат. Таким образом, если элемент получил статус «7» в 2015-10-19, и, например, статус «11» в 2015-10-22, он будет в результате. Я хотел бы иметь только элементы с последним (самым новым) статусом «7» или «9» в этом диапазоне дат.

Обновление: например: table 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-06 по 2015-10-09: мне нужен только ЭЛЕМЕНТ 1, потому что ЭЛЕМЕНТ 2 в данный период имеет другой, более новый статус (5)

пожалуйста помоги! tnx Y


person Yuray    schedule 22.10.2015    source источник


Ответы (1)


Вам нужно добавить ->withTimestamps() функцию для отношения, когда вы используете столбцы с отметками времени

Ex:

public function statuses(){
    return $this->belongsToMany('Status')->withTimestamps();
} 
person Ravisha Hesh    schedule 22.10.2015
comment
Хорошо, это правда. Я редактировал вопрос, но этого мало. Я по-прежнему получаю все товары, которым был присвоен статус за данный период, а не только товары, которые получили статусы КАК ПОСЛЕДНИЙ за этот период. - person Yuray; 22.10.2015