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

Posted

技术标签:

【中文标题】为啥 laravel 返回一个空数组来表示一个有很多关系?【英文标题】:Why laravel returns an empty array for a has many relationship?为什么 laravel 返回一个空数组来表示一个有很多关系? 【发布时间】:2021-08-18 01:11:03 【问题描述】:

我正在使用 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');
    

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

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

【问题讨论】:

我不确定,但你试过return $this->HasMany('App\Team', 'team_ids', '_id'); 你定义的关系完全错误! Eloquent 如何通过team_ids 查找票证,该票证是多个并定义在一个数组结构中? @Jayant 是的,我试过但还是空的 【参考方案1】:

在 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"

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

public function teams()

    return $this->belongsToMany(
        Team::class, null, 'ticket_ids', 'team_ids'
    );

你可以在documentation找到所有这些。

【讨论】:

我有超过 100 万张门票,如果我将ticket_id 存储在团队集合中,那么它将是一个巨大的团队单一文档,我不认为这是更好的方法,你说什么?跨度> 两者都一样吗?但请阅读票证的最后部分。 不,我有数百万张票,但团队很少像 100 或 200 人 “票的最后部分”是什么意思? 我回答的最后一部分,您可以使用 belongsToMany 方法。这就是您设计它的方式,并且应该可以工作。其次,我永远不会担心外键占用太多空间。除非它们是不必要的。【参考方案2】:

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

例子:

public function teams()

    $this->hasMany('App\Team', 'team_ids', '_id')

【讨论】:

我指定但它仍然返回一个 emtpy

以上是关于为啥 laravel 返回一个空数组来表示一个有很多关系?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel 雄辩的关系返回空数组

为啥facebook相册返回一个空数组?

在Laravel中使用WHERE返回空数组

为啥我的数组在附加值后返回 null 或显示一个空数组

Laravel api在邮递员中返回值,但在Vue js中返回空数组

Laravel 关系总是返回空数组