与Laravel / Eloquent

时间:2016-12-24 22:18:18

标签: mysql eloquent laravel-5.3

我刚刚进入Laravel(5.3)并且一直在试图弄清楚我是如何在模型/表格之间完成更复杂的关系的过程中运行Eloquent场景。

在我的示例中,我正在构建一个联系人应用程序。用户有很多联系人,这很容易。更棘手的部分是定义接触连接。假设用户有两个姐妹联系人。用户可以连接这两个触点,以便在它们之间轻松移动。用户可以为联系人分配无限量的连接。

所以,我显然有一个带有id的users表和一个带id的contacts表和一个user_id字段,用于将它附加到用户。用户还可以创建多个连接名称。喜欢,“姐姐”。一旦用户创建了一个新的连接名称,我想存储它,以便稍后可以使用提前输入或其他东西轻松使用相同的连接名称。因此,connection_names表具有绑定到用户的条目。

我遇到困难的表是实际连接数据透视表。我认为它无论如何都是一个数据透视表。所有术语仍然有点新鲜。 图表有点说明了一切。连接表基本上是连接到其他表的所有ID。来自联系人表的两个id建立连接本身,另外一个id用于连接名称。

那么,首先,我是如何设置模型来定义Laravel中与eloquent的连接关系?还有什么我可以/应该做得更好或更干净? 另外,我是否正确地为Laravel / Eloquent执行命名约定以自动选择任何或所有这些?

非常感谢! connections diagram

1 个答案:

答案 0 :(得分:1)

如果您有$connection个对象并想要访问Contact对象(主机或已连接用户),那么您可以使用belongsTo

public function host()
{
    return $this->belongsTo('App\Contact', 'contact_id');
}

public function connection()
{
    return $this->belongsTo('App\Contact', 'connection_id');
}

如果你有一个Contact模型的对象并想要访问所有连接,那么你需要一个belongsToMany关系:

public function connection()
{
    return $this->belongsToMany('App\Contact', 'connections', 'contact_id', 'connection_id');
}

您的命名约定已正确完成。