У меня есть три основных таблицы пользователей и гостей и сообщений
Также у меня есть таблица с именем user_views:
для хранения уникальных пользователей просмотров сообщений
post_id user_id
1 10002
2 10003
3 10011
И еще одна таблица с именем guest_views:
для хранения уникальных гостей просмотров сообщений
post_id guest_id
1 10002
2 10003
3 10011
В почтовой модели у меня есть:
public function user_views()
{
return $this->hasMany('App\Models\PostUserView');
}
public function guest_views()
{
return $this->hasMany('App\Models\PostGuestView');
}
В следующем коде получите правильные результаты, но с двумя разными ключами.
$posts = Post::all()
->withCount('user_views')
->withCount('guest_views')
Я подумал о слиянии user_views и guest_views, а затем вычислил количество следующим образом, но результат включает только количество user_views
public function views()
{
return $this->user_views()->unionAll($this->guest_views());
}
После выполнения следующего кода
$posts = Post::all()
->withCount('views')
->withCount('user_views')
->withCount('guest_views')
Я получаю этот результат
"views_count": 5,
"user_views_count": 5,
"guest_views_count": 2,
Пример ожидаемого результата для prevues:
"views_count": 7,
"user_views_count": 5,
"guest_views_count": 2,
Также я пытаюсь использовать SQL-запрос следующим образом
public function views()
{
return DB::raw("(select * from post_views) union all (select * from post_guest_views)");
}
Но получите
"Call to undefined method Illuminate\Database\Query\Expression::getRelationExistenceCountQuery()"
Поэтому я хотел бы получить общее количество просмотров от всех пользователей и гостей для каждого сообщения.