我有 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 或 属于..如果有人能澄清它的实际工作原理,那就太好了。
提前谢谢。
是的,您应该在User
和Profile
模型之间使用一对一关系,在User
和Friend
模型之间使用一对多关系。将其添加到两个模型中 - Friend
和 Profile
:
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();
我希望这会有所帮助。