【问题标题】:Laravel Eloquent Eager Load from Multiple Table来自多个表的 Laravel Eloquent Eager Load
【发布时间】:2019-06-10 02:32:39
【问题描述】:

我对 Laravel 还比较陌生,最近才开始学习急切加载。 目前,我有一个项目要求我开发一个应用程序来连接公司和合作伙伴。

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

Connection 类中,我使用多态来检索公司/合作伙伴的所有连接:

public function connectable()
{
    return $this->morphTo();
}

PartnerCompany 类中的这个函数:

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

我可以很好地检索连接列表,但是当我想获取每个连接的公司/合作伙伴的详细信息时会出现问题。我想在 Connection 类中使用急切负载,如下所示,但它只能从公司或合作伙伴处获取,但不能同时获取

protected $with = [
    'following'
];

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

可以这样做吗?或者我应该将公司和合作伙伴连接分开到不同的表中?

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

【问题讨论】:

  • 我不确定你什么时候说连接。您是指合伙人与公司之间的关系吗?如果是,那么您可以建立一对一的关系,并且还可以使您的代码更好地阅读
  • 它就像一个社交媒体应用程序,公司和合作伙伴可以相互关注。

标签: php database laravel eloquent eager-loading


【解决方案1】:

我不确定您想要预先加载哪个模型(即model_typeconnect_type),但无论哪种情况,您都可以使用morphTo 关系,如下所示:

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

【讨论】:

  • 是的!这正是我正在寻找的!像魅力一样工作。太感谢了!我最初想从 connect_type 加载,但您的方法也适用于 model_type。再次感谢:)
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多