我刚刚进入Laravel(5.3)并且一直在试图弄清楚我是如何在模型/表格之间完成更复杂的关系的过程中运行Eloquent场景。
在我的示例中,我正在构建一个联系人应用程序。用户有很多联系人,这很容易。更棘手的部分是定义接触连接。假设用户有两个姐妹联系人。用户可以连接这两个触点,以便在它们之间轻松移动。用户可以为联系人分配无限量的连接。
所以,我显然有一个带有id的users表和一个带id的contacts表和一个user_id字段,用于将它附加到用户。用户还可以创建多个连接名称。喜欢,“姐姐”。一旦用户创建了一个新的连接名称,我想存储它,以便稍后可以使用提前输入或其他东西轻松使用相同的连接名称。因此,connection_names表具有绑定到用户的条目。
我遇到困难的表是实际连接数据透视表。我认为它无论如何都是一个数据透视表。所有术语仍然有点新鲜。 图表有点说明了一切。连接表基本上是连接到其他表的所有ID。来自联系人表的两个id建立连接本身,另外一个id用于连接名称。
那么,首先,我是如何设置模型来定义Laravel中与eloquent的连接关系?还有什么我可以/应该做得更好或更干净? 另外,我是否正确地为Laravel / Eloquent执行命名约定以自动选择任何或所有这些?
答案 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');
}
您的命名约定已正确完成。