TL; DR
使用Laravel 5.6,我需要为多对多关系添加一对多关系。
我想知道我是否需要另一种关系,如果是这样的话怎么做。或者,如果我可以使用具有额外属性的现有数据透视表?
更多详情
我的数据透视表中的屏幕截图显示了我如何管理我的连接(又名"朋友"):当两个联系人都已接受连接时,状态等于1.到目前为止很好,Laravel中的多对多关系系统完美地管理着,一切都很好。
但是现在,我想添加一个"最喜欢的"系统到这些连接,一个用户可以添加另一个用户作为最喜欢的联系人,但这显然不一定是一种共同的感觉,情况可能最终会像这样:
当然,与两个支点的多对多关系并不会返回任何内容,因为 已加星标的 字段没有相同的值在两个记录上。当我将第二条记录更新为" 1"同样,关系也正确返回。
有没有办法使用枢轴(状态)和简单的额外属性(已加星标)来使用该表,或者我是否需要另一个在其他地方建立关系? (以及如何以最好的方式做到这一点?)
答案 0 :(得分:1)
使用以下数据创建星形表
Schema::create('starrings', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('starred_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('starred_id')->references('id')->on('users')->onDelete('cascade');
});
在您的用户模型上,添加以下内容:
public function starred(){
return $this->hasMany('App\Starring','starred_id');
}
public function starrings(){
return $this->hasMany('App\Starring','user_id');
}