Eloquent Фильтр по связям (ТОЛЬКО последняя запись) - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно создать область для фильтрации отношений hasMany.Проблема в том, что я хочу применить этот запрос к последнему элементу ТОЛЬКО , я имею в виду, я хочу, чтобы моя Модель была отфильтрована по столбцу конкретной записи отношения HasMany, возможно ли это?

MyModel:

{
    public function others() 
    {
        return $this->hasMany(Other::class); // Only last one is important for querying
    }
}

Затем в области я хотел бы сделать что-то вроде этого:

public function scopeCurrentActive(Builder $builder)
{
    return $builder->whereHas('others', function(Builder $q) {
        // How to apply this ONLY to last created record???
        return $q->whereDate('activation', '<=', today());
    });
}

И это все!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

для фильтрации по элементам, которые активированы сегодня, напишите:

public function scopeCurrentActive()
{
    return $this->whereHas('other', function($q) {
        return $q->whereDate('activation', '==', Carbon::now()->toDateString());
    });
}
0 голосов
/ 25 сентября 2019

вместо

public function others() 
    {
        return $this->hasMany(Other::class); // Only last one is important for querying
    }

вы можете просто сделать:


public function other() 
    {
        return $this->hasOne(Other::class)->latest();querying
    }

, а затем

public function scopeCurrentActive(Builder $builder)
{
    return $builder->whereHas('other', function(Builder $q) {
        return $q->whereDate('activation', '<=', today());
    });
}
...