Adonis 5如何从$extras获取pivot_column并注入预加载

问题描述 投票:0回答:4

我在 ManyToMany 装饰器上创建了一个额外的列,并且知道如何根据其值预加载我的数据。我的问题是我如何才能真正获取该值并将其插入到相关的预加载数据中或将它们插入到父模型上的新数组中,换句话说,我如何才能用我的记录带回额外的pivot_column,因为目前它位于$extra 并且没有在 api 调用中与其他属性一起显示,我当前创建一个新数组并使用 map() 插入它,但我非常担心这种方法。

谢谢你

javascript many-to-many knex.js adonis.js lucid
4个回答
2
投票

所以假设我们有一个与颜色表存在多对多关系的产品表

export default class Product extends BaseModel {
@manyToMany(() => Color, {
pivotTable: 'color_products',
pivotTimestamps: true,
pivotColumns: ['stock'],
})
public colors: ManyToMany<typeof Color>
} 

当我们使用 product.load() 返回单个实例或使用 Product.preload()

返回数组时

$extras 中将有颜色数组作为产品参数和数据透视表 color_products 数据 我问如何将 $extras 作为产品参数,但这是一个错误,库存(编号)与产品的颜色有关,例如我想知道数据库中有多少件绿色衬衫, 因此,解决方案将做到这一点,将每个颜色对象的库存编号作为产品参数。具体方法如下:

export default class Color extends BaseModel {
@manyToMany(() => Product, {
pivotTable: 'color_products',
pivotTimestamps: true,
pivotColumns: ['stock'],
})
public products: ManyToMany<typeof Product>

@computed()
public get stock() {
  const stock = this.$extras.pivot_stock
  return stock
  }
}

精简版

在相关模型上定义一个计算方法并从 this.$extras 返回列:

    @computed()
public get stock() {
  const stock = this.$extras.pivot_stock //my pivot column name was "stock"
  return stock
  }

不要忘记你应该在模型中的 @manyToMany 选项中准备好这个:

pivotColumns: ['stock'],

或者从其他方式带来pivotColumn。


0
投票

不知道为什么要创建一个新数组,因为您可以使用

query()
继续
map()
实例:

      const rewards = await user.related('rewards').query()

      const transformed = rewards.map((reward) => {
        return {...reward.toJSON(), status: reward.$extras.pivot_status}
      })
      
      return response.json({data: transformed})

尽管如此,这仍然不好,因为它没有分页:(但它适用于我的情况。


0
投票

你可能需要这个。 额外的枢轴列


0
投票

您还可以通过在模型上定义以下属性来序列化 $extras 对象。

class Post extends BaseModel {
  /**
   * Serialize the `$extras` object as it is
   */
  public serializeExtras = true
}

此外,您还可以通过将 serializeExtras 属性声明为函数来自定义要从 extras 对象中选取的属性。

class Post extends BaseModel {
  public serializeExtras() {
    return {
      category: {
        name: this.$extras.category_name
      },
    }
  }
}

在这里找到:https://docs.adonisjs.com/guides/models/serializing-models#serializing-extras-object

© www.soinside.com 2019 - 2024. All rights reserved.