Laravel Красноречивый обзор для Модели A с более поздней последней Моделью B - PullRequest
0 голосов
/ 23 января 2020

У меня есть модель Foo с соответствующим Bar, со связанным Baz, в Laravel 5.7

Foo имеет отношение ownTo (Bar)

Bar имеет hasOne (Baz) -> последний () связь с lastBaz

   public function latestBaz {
      return $this->hasOne(Baz::class)->latest();
   }

Я пытаюсь создать область, которая доставит меня всем Foos, где latest Baz был недавно обновлен. Итак, где Foo-> updated_at находится перед Foo-> Bar-> latestBaz-> updated_at

Я пытался передать $ this-> updated_at закрытию whereHas (), не повезло, потому что -> updated_at не существует на тот момент, и я попробовал следующее соединение

/**
 * @param  \Illuminate\Database\Eloquent\Builder $query
 * @return mixed
 */
public function scopeOutOfDate($query) {
    return $query->select('foo.*')->whereHas('Bar')
        ->join('foo', function($join) { /** @var JoinClause $join */
            return $join->on('foo.bar_id', '=', 'baz.bar_id')
                ->whereRaw('foo.updated_at > baz.updated_at');
        }
    );
}

, что .... closei sh. Для каждого Foo, который имеет более позднюю базу, он имеет несколько строк. Так что, если Foo имеет 5 старых Baz и 1 более новый Baz, он выберет 6 строк и не даст мне доступа к связанным (так что Foo [0] -> Bar дает ноль)

...