В Laravel У меня есть модель Client, которая имеет отношение один ко многим с моделью Activity. Это отношение просто определяет, какие действия необходимо выполнить для определенного c клиента.
Это то, что я имею в своей модели клиента, чтобы получить отношение действий. У меня также есть некоторые условия, так как я хочу получить только те действия, которые должны быть выполнены для клиента, заказанного по fdate
(дата исполнения).
public function activities() {
return $this->hasMany('App\Models\Activities', 'ccid')->where('fdate', '!=', '0000-00-00')->where('archive', 'n')->orderBy('fdate', 'DESC');
}
На данный момент у меня есть несколько фильтров и Я хочу отфильтровать клиентов для извлечения на основе вида деятельности, который необходимо выполнить в их учетной записи. Например, я хочу получить все клиенты, у которых есть активность: Продажа .
Вот так я получаю все действия, которые принадлежат клиенту, где тип соответствует.
$clients = Client::with(['activities']);
if(isset($params['type']) && !empty($params['type'])){
$activityType = $params['type'];
$clients->whereHas('activities', function($query) use($activityType) {
$query->where('type', $activityType);
});
}
В идеале, при фильтрации я должен извлекать всех клиентов, у которых есть операция Продажи, упорядоченная по ближайшей операции, которая должна быть сделана следующей (ближайшая fdate
).
Похоже, это работает как-то, но в некоторых случаях у объекта клиента есть действия, которые не только Продажа .
Как получить только операции продажи для каждого клиента, заказанного ближайшим (fdate
)