PHP Laravel 5.2 belongs to


PHP Laravel 5.2 belongs to

我有 3 个表用户、个人资料和朋友。

显然,用户包含用户。然后我得到了个人资料和朋友表(见下文)。

public function up()
{
    Schema::create('profiles', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('picture')->nullable();
        $table->string('status')->nullable();
        $table->string('text')->nullable();
        $table->boolean('show_sex');
        $table->boolean('show_dob');
        $table->timestamps();
    });
}
public function up()
{
    Schema::create('friends', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id_sender')->unsigned();
        $table->integer('user_id_receiver')->unsigned();
        $table->foreign('user_id_sender')->references('id')->on('users');
        $table->foreign('user_id_receiver')->references('id')->on('users');
        $table->integer('status'); // 1 = friends, 2 = under validation
        $table->timestamps();
    });
}

如您所见,我创建了一些与 Users 表相关的外键。

"好友"表包含用户之间的所有友谊(状态字段将确定友谊是正在验证还是已验证)。我有Laravel 5.2附带的默认用户模型,并且想知道,我如何轻松获得属于已签名用户的所有友谊?我可以使用类似 belongsTo() 之类的东西来轻松获取user_id_receiver字段与签名用户 id 相同的所有好友请求吗?我没有安静地理解文档 hasOne 或 属于..如果有人能澄清它的实际工作原理,那就太好了。

提前谢谢。

是的,您应该在UserProfile模型之间使用一对一关系,在UserFriend模型之间使用一对多关系。将其添加到两个模型中 - FriendProfile

public function user()
{
    return $this->belongsTo('app'User');
}

并将其添加到User模型中:

public function profile()
{
    return $this->hasOne('app'Profile');
}
public function friend()
{
    return $this->hasMany('app'Friend');
}

然后你可以使用Eloquent来获取数据:

$signedUserId = Auth::user()->id;
$currentUserFriendRequests = Friend::where('user_id_receiver', $signedUserId)->get();

我希望这会有所帮助。