我试图轻松检查给定的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);
答案 0 :(得分:2)
以下是用户模型类中的解决方法:
public function isFriend($friendId) {
return (boolean) $this->friends()->where('users.id', $friendId)->count();
}