У меня есть две модели: Leads и Status.
class Lead extends Model
{
public function statuses() {
return $this->hasMany('App\LeadStatus', 'lead_id', 'id')
->orderBy('created_at', 'DESC');
}
public function activeStatus() {
return $this->hasOne('App\LeadStatus', 'lead_id', 'id')
->latest();
}
}
class LeadStatus extends Model
{
protected $fillable = ['status', 'lead_id'];
}
Это работает нормально, теперь я пытаюсь получить все потенциальные возможности на основе «статуса» последнего LeadStatus.
Я пробовал несколько комбинаций, но безуспешно.
if ($search['status']) {
$builder = $builder
->whereHas('statuses', function($q) use ($search){
$q = $q->latest()->limit(1);
$q->where('status', $search['status']);
});
}
if ($search['status']) {
$builder = $builder
->whereHas('status', function($q) use ($search){
$q = $q->latest()->Where('status', $search['status']);
});
}
Кто-нибудь делал это с Eloquent? Нужно ли писать какие-то необработанные SQL-запросы?
РЕДАКТИРОВАТЬ 1: я попытаюсь объяснить снова: D
В моей базе данных статус отведения не является отношением 1 к 1. Это потому, что я хочу получить исторический список всех статусов, которые имел Лидер.
Это означает, что при создании Lead создается первый LeadStatus со статусом «new» и текущей датой.
Если приходит продавец, он может изменить статус ведущего, но это НЕ обновляет предыдущий LeadStatus, вместо этого он создает новый связанный LeadStatus с текущей датой и статусом «открыто».
Таким образом, я вижу, что Лид был создан 05/05/2018, и что он изменился на статус "открыт" 05.05 2018.
Теперь я пытаюсь написать запрос, используя eloquent, который учитывает только последний статус, связанный с Lead.
В предыдущем примере, если я отфильтрую по потенциальному запросу со статусом «новый», этот потенциальный запрос не должен отображаться, так как к настоящему времени он имеет статус «открытого».
Надеюсь, это поможет