【问题标题】:Laravel and Fractal: Duplicates with belongsToMany relationshipsLaravel 和 Fractal:与 belongsToMany 关系重复
【发布时间】:2015-01-16 05:08:04
【问题描述】:

我正在将 Fractal 与 Eloquent (Laravel) 结合使用,并且遇到了具有多对多 (belongsToMany) 关系的模型的问题。我正在使用 JsonApiSerializer,但似乎找不到从包含的资源中删除重复条目的合适位置。

例如,我在用户和电子邮件之间有一个多对多的关系。当我从我的 API 中拉下我的电子邮件列表时,我看到“用户”中有重复项(因为同一用户附加到多个电子邮件)。

我添加了以下使用 php array_unique 的 sn-p,但它似乎有点混淆了 json 输出(如下)。有没有更好的地方来挂钩和删除重复项?

重复:

return $this->manager->createData($resource)->toArray();

独特:

    foreach($this->manager->createData($resource)->toArray() as $key => $resource)
    {
        $resources[$key] = array_unique($resource, SORT_REGULAR);
    }

    return $resources;

但是,当使用array_unique 时,输出会从:

users: [
    {
        id: "53e8ea180454040b008b4569",
        ...
    },
    {
        id: "53e8ea180454040b008b4568",
        ...
    }
]

users: {
    0: {
        id: "53e8ea180454040b008b4569",
        ...
    },
    1: {
        id: "53e8ea180454040b008b4568",
        ...
    },
}

【问题讨论】:

  • 那么在你得到的结果中,用户嵌套在电子邮件资源中?
  • 应该提到“用户”资源与“电子邮件”资源一起加载。

标签: php laravel


【解决方案1】:

如果问题是您的输出必须是 array [] 但您得到的是 object {} - 在 return 语句上使用 array_values()

在您的代码中:

return $resources;

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 2021-03-22
    • 1970-01-01
    • 2015-02-22
    • 2018-05-19
    • 2018-03-08
    • 2021-10-17
    • 2019-07-08
    • 1970-01-01
    相关资源
    最近更新 更多