Laravel Eloquent 来自多个 Table 的预加载

Laravel Eloquent Eager Load from Multiple Table

我是 Laravel 的新手,最近才开始学习预先加载。 目前,我有一个项目,我需要开发一个应用程序来连接公司和合作伙伴。

连接可以是公司-公司、合作伙伴-合作伙伴或公司-合作伙伴之间的连接。现在,我将所有连接存储在一个 Connection table 中,如图 here:

Connection class 中,我使用多态检索 company/partner:

的所有连接
public function connectable()
{
    return $this->morphTo();
}

并且 PartnerCompany classes:

中的此函数
public function my_connection()
{
    return $this->morphMany(Connection::class, 'connectable', 'model_type', 'model_id');
}

我可以很好地检索连接列表,但是当我想获取每个连接的详细信息时出现问题 company/partner。我想在 Connection class 中使用预加载,如下所示,但它只能设法从公司或合作伙伴那里获得,但不能同时从两者那里获得

protected $with = [
    'following'
];

public function following()
{
    return $this->belongsTo(Company::class, 'connect_to', 'id');
}

这可以吗?或者我应该将公司和合作伙伴的联系分成不同的 table 吗?

编辑:通过连接,我的意思是合作伙伴或公司可以像通常的社交媒体应用程序一样connect/follow彼此。这不是相互的。比如说,如果合作伙伴 A 关注合作伙伴 B,则只会存储该连接。合作伙伴 B 仍被视为未连接到 A。

我不确定你想要预加载哪个模型(即 model_typeconnect_type),但在任何一种情况下你都可以使用 morphTo 关系,如:

public function following()
    {
        return $this->morphTo(null, $type = 'connect_type', $id = 'connect_to');
    }