Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉雷维尔:选择正确的关系_Laravel_Eloquent - Fatal编程技术网

Laravel 拉雷维尔:选择正确的关系

Laravel 拉雷维尔:选择正确的关系,laravel,eloquent,Laravel,Eloquent,我有用户表,每个用户都可以添加朋友。朋友是其他用户 我创建了一个名为user\u friends的数据透视表,其中包含以下列: id | user_id | friend_id 如何定义关系以便使用$user->friends()获得用户朋友?首先:数据透视表没有行的id 您需要有一个table friend\u用户 friend_id | user_id 在用户模型中设置您的关系 public function friends() { return $this->hasMa

我有
用户
表,每个用户都可以添加朋友。朋友是其他用户

我创建了一个名为
user\u friends
的数据透视表,其中包含以下列:

id | user_id | friend_id

如何定义关系以便使用
$user->friends()
获得用户朋友?

首先:数据透视表没有行的id

您需要有一个table friend\u用户

 friend_id | user_id
在用户模型中设置您的关系

public function friends()
{
    return $this->hasMany(User::class);
}

public function users()
{
    return $this->belongsToMany(User::class);
}

我不是100%确定这是否有效,但想知道它是否有效

您可以按以下方式执行:

在用户类中,定义以下函数以获取特定用户的好友:

public function friends()
{
   return $this->hasMany("App\Friends","user_id","id");
}

$user = Users::find($user_id);
$user_friends = $user->friends()->get();

为什么是第二个函数?@TheUnreal我认为您应该明确地将可透视的名称作为hasMany函数的第二个参数。那就行了。第二个函数不是必需的。@JohnDoe当我将数据透视表的名称作为第二个参数时,它试图将其作为一列进行查找,
column not found:1054未知列“users.user\u friends”
@TheUnreal通常使用相关模型的名称来查找数据透视表。但是,您可以将数据透视表名称作为参数传递,就像处理相关字段一样。您可以这样定义它们:
return$this->belongTomany('App\User','friends\u User','User\u id','friends\u id')
@TheUnreal在回答您关于第二个函数的问题时,最好将关系的反面设置为可用,以便在
朋友
的上下文中可以返回他们的关联用户,并从
用户
上下文中可以返回他们的朋友。当每个模型都有不同的模型时,这就更有意义了,但在这种情况下就没那么多了!最重要的是确保数据透视表名称按字母顺序排列,并使用单数表名。数据透视表必须是“朋友\用户”。