首页 > 解决方案 > Laravel - 语法错误或访问冲突:1066 不是唯一的表/别名

问题描述

我有一个用户模型

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);

我该如何解决?谢谢

标签: phplaravelmany-to-manyrelationship

解决方案


您正在将 User 模型与 User 模型相关联,而不是与 Block 模型相关联。数据透视表的模型不是必需的,通常永远不会使用。

public function blocks()
{
    return $this->belongsToMany(User::class, 'block_user', 'blocker_id', 'blocked_id')->withTimestamps();
}

因此,与其Block::class在您的 belongsToMany 中关联,不如关联到User::class.


推荐阅读