php - 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);
我该如何解决?谢谢
解决方案
您正在将 User 模型与 User 模型相关联,而不是与 Block 模型相关联。数据透视表的模型不是必需的,通常永远不会使用。
public function blocks()
{
return $this->belongsToMany(User::class, 'block_user', 'blocker_id', 'blocked_id')->withTimestamps();
}
因此,与其Block::class
在您的 belongsToMany 中关联,不如关联到User::class
.
推荐阅读
- angular - 如何将响应式表单数据发布到 REST API
- c# - c# 使用 bcp 将数据导出到文本文件
- r - 基于来自不同数据集的变量复制向量的元素
- asp.net - 根据当前 URL 设置查询参数
- solr - Solr 7.4 org.apache.solr.common.SolrException 打开新搜索器时出错
- angular - 识别 mergeMap 中的最后一个对象
- symfony - EasyAdminBundle:验证不适用于 CKEditorType
- php - PHP电子邮件未发送给多个收件人
- python - 基于标准(DataFrame)创建估计窗口
- laravel - 在访问时撤销 Laravel 临时签名路由上的签名