laravel-acquaintances
laravel-acquaintances copied to clipboard
Get unrelated users
How could I get a list of unrelated users. I need to put together a list of friendship suggestions.
Thanks!
I'm currently using it like this:
$users = $user->doesntHaveFriendships()
->where('id', '<>', $user->id)
->inRandomOrder()
->take($limit )
->get();
I added in my App\Models\User.php model:
public function invertedFriends()
{
$friendshipModelName = Interaction::getFriendshipModelName();
return $this->morphMany($friendshipModelName, 'recipient');
}
public function scopeDoesntHaveFriendships(Builder $builder)
{
return $builder->whereDoesntHave('friends')
->whereDoesntHave('invertedFriends');
}
But I wouldn't want to have additional methods in the model. Any suggestion?
The same need happens to list the publications of the user and friends:
$user = auth()->user();
$publications = Publication
::where(function (Builder $query) use ($user) {
$query->whereHas('user.friends', function (Builder $query) {
$query->where('status', Status::ACCEPTED);
})->orWhereHas('user.invertedFriends', function (Builder $query) {
$query->where('status', Status::ACCEPTED);
})->orWhere('user_id', $user->id);
})
...
It is necessary to use invertedFriends from the User.php model. The ideal would be something like:
$user = auth()->user();
$publications = Publication
::where(function (Builder $query) use ($user) {
$query->whereHas('user.friends', function (Builder $query) {
$query->where('status', Status::ACCEPTED);
})->orWhere('user_id', $user->id);
})
...
Did you ever figure this out? I'm trying to implement something similar.