В приложении Laravel 5 у меня есть 5 таблиц - пользователи, книги, авторы, подписчики и activity_feeds.
Пользователи могут подписываться на авторов, а книга может иметь несколько авторов.Когда создается книга, создается запись activity_feeds, которая ссылается на идентификатор book_id.
Мне нужно создать красноречивый запрос, чтобы получить коллекцию активность_фидов для каждого пользователя, чтобы перебирать в фиде активности их домашней страницы.
Модель My Book включает в себя
public function authors()
{
return $this->belongsToMany('App\Author')->withTimestamps();
}
Таблица activity_stream выглядит следующим образом (с примерами данных)
id (1)
user_id (3)
type (New Book)
book_id (18)
created_at etc
, а мой контроллер пользователя включает
public function feedItems()
{
return $this->hasMany('App\ActivityFeed');
}
public function userFollowings()
{
return $this->belongsToMany('App\User', 'followers', 'follower_id', 'subject_id')->withTimestamps();
}
public function authorFollowings()
{
return $this->belongsToMany('App\Author', 'followers', 'follower_id', 'author_id')->withTimestamps();
}
Мой текущий запрос (который не работает), содержащийся в модели User:
public function getactivityFeedsAttribute()
{
$userFollowings = $this->userFollowings()->pluck('subject_id')->toArray();
$authorFollowings = $this->authorFollowings()->pluck('author_id')->toArray();
$userFeeds = ActivityFeed::whereIn('user_id', $userFollowings)
->orwhereIn('book_id', function($query){
$query->select('id')
->from(with(new Book)->getTable())
->whereHas->authors()
->whereIn('id', $authorFollowings);
})
->get();
return $userFeeds;
}
$ userFollowings и $ authorFollowings работают нормально.
Я не уверен, что я 'Я использую правильный синтаксис для data [book_id], чтобы вытащить идентификатор книги из строки activity_feeds, и я действительно не уверен, смогу ли я вложить в таблицу поиск или использовать $ query как этот.Это также кажется ОЧЕНЬ сложным.Могу ли я упустить что-то гораздо более прямолинейное?
В блейде, который я так называю
@forelse ($user->activityFeeds as $activityFeed)
<div class="row">
<div class="col-2">
{{ $activityFeed->user->firstname }}
</div>
<div class="col-2">
{{ $activityFeed->type }}
</div>
</div>
<hr>
@empty
No activity yet
@endforelse
, который работает, если я просто запрашиваю 'ActivityFeed :: whereIn (' user_id ',$ userFollowings) '