检查用户是否是Laravel 4中的朋友的简单方法

时间:2016-05-29 12:08:52

标签: php laravel-4 eloquent many-to-many

我试图轻松检查给定的user_id是否是当前用户的朋友,因此我可以在blade @if语句中进行检查。我的友谊功能是双向的,不需要接受友谊。

我似乎有一些设置,但我不确定我是否正确地做了。

友情表

Schema::create('friendshipLinks', function ($table) {
    $table->increments('id');
    $table->integer('userId_1'); // foreign key
    $table->integer('userId_2'); // foreign key

    $table->timestamps();

    $table->foreign('userId_1')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('userId_2')->references('id')->on('users')->onDelete('cascade');
});

用户模型(修剪)

class User extends Eloquent implements UserInterface, RemindableInterface {

    use EloquentTrait, UserTrait, RemindableTrait;
    protected $table = 'users';

    // RELATIONSHIPS
    public function posts() {
        return $this->hasMany('Post');
    }

    // FRIENDSHIP
    function friends() {
        return $this->belongsToMany('User', 'friendshipLinks', 'userId_1', 'userId_2');
    }

    function friendsWith() {
        return $this->belongsToMany('User', 'friendshipLinks', 'userId_2', 'userId_1');
    }
}

友谊模式

class Friendship extends Eloquent {
    protected $table = 'friendshipLinks';
    protected $fillable = ['userId_1', 'userId_2'];
}

目前我可以获得所有用户朋友的数组(双向)

$friends = User::find($id)->friends;
$friendsWith = User::find(Auth::user()->id)->friendsWith;
$result = $friends->merge($friendsWith);

如何轻松实现允许我调用返回布尔值的函数的东西,如:

$isFriend = User::find($id)->isFriend($friend_id);

1 个答案:

答案 0 :(得分:2)

以下是用户模型类中的解决方法:

public function isFriend($friendId) {
    return (boolean) $this->friends()->where('users.id', $friendId)->count();
}