Рассмотрим следующее:
$posts = $this->model->newQuery()
->whereIn('user_id', $user->following) // specifically this line
->orWhere('user_id', $user->id)
->get();
Проблема с вышесказанным заключается в том, что существует два запроса:
- Получить следующее:
$user->following
- Получитьposts: Above
Это было бы намного эффективнее с использованием подзапроса, однако я не могу вспомнить правильный способ сделать это ...
Я попробовал всеиз следующего:
// This was a long-shot...
...->whereIn('user_id', function ($query) use ($user) {
$query->raw($user->following()->toSql());
});
// This works but pretty sure it can be done better with eloquent...
...->whereIn('user_id', function ($query) use ($user) {
$query->select('follow_id')
->from('user_follows')
->where('user_id', $user->id);
});
Есть ли способ, которым это может быть достигнуто путем использования ранее определенного отношения $user->following()
вместо ручного определения запроса отношения, как в предыдущем примере выше?
Ссылка
Отношение following
определяется следующим образом:
/**
* Get the users that the user follows.
*/
public function following()
{
return $this->belongsToMany('SomeApp\User\Models\User', 'user_follows', 'user_id', 'follow_id')
->withTimestamps();
}