【发布时间】:2018-12-07 23:18:03
【问题描述】:
我有一个用户模型
class User
{
protected $primaryKey = 'user_id';
public function blocks()
{
return $this->belongsToMany(Block::class, 'block_user', 'blocker_id', 'blocked_id')->withTimestamps();
}
}
还有一个积木模型
class Block extends Model
{
protected $table = "block_user";
}
所以我有两个表:一个用于用户信息,另一个用于当一个阻塞另一个时(数据透视表),所以用户表中的user_id 既是本地的又是外部的。
问题是,当我想知道用户是否阻止了另一个用户时,它会返回一条错误消息:Syntax error or access violation: 1066 Not unique table/alias: 'block_user'
$user = User::where('user_id', 1)->first();
dd($user->blocks->first_name);
我该如何解决?谢谢
【问题讨论】:
-
多对多关系需要一个数据透视表或中间表。
-
正如我所说我有数据透视表但是我只有两个表。其中一个用户其中一个枢轴。还需要另外一张桌子吗?
-
但我真的不需要更多了!这第三张表应该包含什么?!来自
users表的用户阻止来自users表的另一个用户和一个包含哪个用户阻止了block_user表中的哪个用户的数据透视表,所以我不需要另一个表。我会吗? -
好的,我明白你的意思了。您不需要 Block 模型。此关系中的相关模型是用户。这是
User -> blocks <- User。因为这是多对多的关系,所以你永远无法做到$user->blocks->first_name。blocks将是一个集合。 -
但我没明白你的意思!我现在该怎么办?我应该将
Block::class更改为User::class吗?
标签: php laravel many-to-many relationship