В основном у меня есть таблица подписчиков, в которой хранятся user_id и followable_id.Например, если пользователь A следует за пользователем B, создается запись.И если B следует за A, то создается новая запись.Мне нужно возвращать результат только в том случае, если A следует за B, но если B также следует за A, то ничего не возвращать.
Я пробовал различные решения, но они не работали.Может быть, кто-то мог бы указать мне правильное направление, спасибо.
РЕДАКТИРОВАТЬ: Это работает, однако это уродливо хакерской, и я хочу избежать этого:
$iFollows = Followers::where('user_id', '=', $currentUser->id)->get();
$myFollowers = Followers::where('followable_id', '=', $currentUser->id)->get();
foreach($myFollowers as $key => $value){
foreach($iFollows as $iFollow){
if($value->user_id == $iFollow->followable_id){
$myFollowers->forget($key);
}
}
}
Структура базы данных:
Есть ли способ достичь того же, но с помощью построителя запросов laravel?
Пользователь реализует черту Followable
trait Followable
{
/**
* Collection of followers attached to this object
*
* @return Query|Collection
*/
public function followers()
{
return $this->morphToMany(
User::class, // related
'followable', // name
'followers', // table
'followable_id', // foreignKey
'user_id' // otherKey
)->where('status', 1)->withPivot('created_at', 'updated_at');
}
/**
* @return mixed
*/
public function followings()
{
return $this->morphToMany(
User::class, // related
'followable', // name
'followers', // table
'user_id', // foreignKey
'followable_id' // otherKey
)->where('status', 1)->withPivot('created_at', 'updated_at');
}