У меня есть модель 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 дает ноль)