коллекция filter () не работает в подзапросе - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь получить пользователей, у которых есть адреса, и время создания этого адреса не должно превышать 7 дней:

$users = User::whereHas('address', function($q) {
        $q->where(function ($query) {
             $query->get()->filter(function ($address) {
                 return Carbon::now() < Carbon::parse($address->getOriginal('created_at'))->addDays(7);
             });
         });
     });

filter() работает правильно, но я не могу вернуть его результаты, мой результат - все пользователи, у которых есть адреса.

Ответы [ 3 ]

1 голос
/ 22 января 2020

вы можете попробовать вот так

$user = User::where('address',date('Y-m-d', strtotime('-7 days')))->where('created_at',date('Y-m-d', strtotime('-7 days')))->get();
1 голос
/ 22 января 2020

Изменить код с комментариями

$users = User::whereHas('address', function ($q): void {
    $q->where(function ($query): void {
        /**
         * Subqueries use Eloquent Builder class here to add some wrapped filters 
         * But your code takes all addresses, filter them for nothing
         * You should add SQL filters to builder something like that:
         **/
        $query->whereDate(Carbon::now()->subDays(7), '<', 'created_at');
    })
    /** To get users by your filters */
    ->get();
1 голос
/ 22 января 2020

Вы можете использовать whereDate так:

$users = User::whereHas('address', function ($q) {
    $q->whereDate('created_at', '>', Carbon::now()->subDays(7));
})->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...