【问题标题】:Illuminate \ Database \ QueryException (42000) SQLSTATE[42000]: Syntax error or access violationIlluminate\Database\QueryException (42000) SQLSTATE[42000]: 语法错误或访问冲突
【发布时间】:2018-12-24 02:07:08
【问题描述】:

尝试在 FriendController 上执行以下查询

$friends = Auth::User()->friends;

这就是用户模型上的朋友功能

public function friends()
{
    return $this->belongsToMany('App\Friend', 'friends', 'user_id', 'friend_id');
}

但是在到达路线时我收到以下错误

照亮\数据库\查询异常(42000) SQLSTATE[42000]: 语法错误或访问冲突: 1066 不是唯一的表/别名: 'friends' (SQL: select friends.*, friends.user_id as pivot_user_id, friends.friend_id作为pivot_friend_id 来自friends 内部连接friendsfriends.id = friends.friend_id 其中friends.user_id = 2)

【问题讨论】:

标签: laravel laravel-5 eloquent mysql-error-1064


【解决方案1】:

数据透视表几乎不应该有模型。如果您尝试将friends 用作两个用户的数据透视表,则该关系应该引用App\User,而不是App\Friend(或代表当前类的静态)。

public function friends()
{
    return $this->belongsToMany(static::class, 'friends', 'user_id', 'friend_id');
}

您希望返回一组用户,而不是“朋友”,因为朋友不是实体,而是一种关系。

【讨论】:

  • 什么返回null?
  • 我尝试了这两种解决方案并将其传递给视图,然后以 json 格式打印,然后它只会变为 null
  • belongsToMany 永远不应该返回 null,只返回一个空集合,所以你一定是做错了什么
  • 是的,我做错了,但现在可以了,非常感谢。
猜你喜欢
  • 2023-04-10
  • 2019-03-14
  • 2015-10-12
  • 2023-04-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多