如何在Laravel中使用属于同一模型的列将数据插入数据透视表?

时间:2016-05-21 12:17:03

标签: php mysql laravel

我有一个阻止模型,基本上是阻止用户。它有target_idsender_id,两者都是来自用户表的ID。当用户想要阻止其他用户时,如何将数据添加到此数据透视表?我的关系方法应该是什么样的?

1 个答案:

答案 0 :(得分:1)

由于 target_id sender_id 都是users表中的字段,因此必须以这种方式定义您的关系。

class User {

  public function blocks() {
    return $this->belongsToMany('App\User','blocked_users','sender_id','target_id')->withPivot(['id']);
   }

  public function blockedBy() {
    return $this->belongsToMany('App\User','blocked_users','target_id','sender_id')->withPivot(['id']);
   }

}

此处blocked_users是表格的名称。

因此,要阻止用户,您可以: -

//User who is going to block
$user = User::find($id);
$inputs = [$target_user_id];
$user->blocks()->attach($inputs);

//or you can use,
$user->blocks()->sync($inputs, false);

当忽略旧的同步行并附加新的行时,将使用上述同步中的false。

要获取该特定用户已被阻止的用户列表,您可以: -

$user = User::find($id);
$user->blocks;

获取该特定用户被

阻止的用户列表
$user = User::find($id);
$user->blockedBy;

谢谢,