为什么 laravel 返回一个空数组来表示有很多关系?

问题描述

我正在使用 jenssegers/laravel-mongodb 并且我的架构如下

取票:

{
      "_id": ObjectId("5f32d9bb486e94459b6531c3"),"subject": "\"URGENT\" Non-Compliance In (Eastern Region)","content": "abc","user_team": "5f044199e40dfe4847056785","team_ids": [
        "5f3012bbb7c2bc422e4da5a2"
      ],"organization_id": "5f74359c7dcc8f6fbb2b47e2"
}

团队合集:

{
      "_id":ObjectId("5f3012bbb7c2bc422e4da5a2"),"name": "Medical Maintenance","createTickets": true
}

票证模型中的关系:

public function teams()
    {
         return $this->HasMany('App\Team','team_ids');
    }

团队模型中的关系:

public function ticket()
    {
        return $this->belongsTo('App\Ticket');
    }

我在获取团队关系数据时遇到问题。它返回一个 emtpry 数组。

Laravel 版本是 6.2 jenssegers/mongodb 版本是 3.6

解决方法

在 hasMany 的上下文中,您对外键的处理是错误的。相反,票证上应该有一个名为 team_id 的列,然后您可以执行以下操作。

public function teams()
{
     return $this->HasMany('App\Team','team_id');
}

如果您的票看起来像这样,这会起作用。

{
      "_id": ObjectId("5f32d9bb486e94459b6531c3"),"subject": "\"URGENT\" Non-Compliance In (Eastern Region)","content": "abc","user_team": "5f044199e40dfe4847056785","team_id":"5f3012bbb7c2bc422e4da5a2"
      "organization_id": "5f74359c7dcc8f6fbb2b47e2"
}

相反,看起来您实际上是在做多对多的事情,因为一个团队可以有很多票并且可以逆转。可以这样定义,这可能会将数据添加到两个模型中,但我不是 MongodbLaravel 的专家。

public function teams()
{
    return $this->belongsToMany(
        Team::class,null,'ticket_ids','team_ids'
    );
}

您可以在 documentation 中找到所有这些。

,

您可以指定外键和本地键。

示例:

public function teams()
{
    $this->hasMany('App\Team','team_ids','_id')
}