Возврат данных с использованием отношения в adonisjs равен нулю - PullRequest
0 голосов
/ 01 октября 2019

Я хочу получить данные из двух таблиц, которые имеют отношение один к одному в базе данных, используя adonisjs. Когда я пытаюсь получить все данные из одной из таблиц, этот результат равен нулю.

Это мой код отношения в модели:

class Cart extends Model {

    product () {
        return this.hasOne('App/Models/Product')
    }
    static get table()
    {
        return 'cart'
    }

    static get primaryKey()
    {
        return 'id_cart'
    }

    static get foreignKey()
    {
        return 'id_product'
    }

...

Это модель моего продукта:

class Product extends Model {

    static get table()
    {
        return 'product'
    }

    static get primaryKey()
    {
        return 'product_id'
    }

}
module.exports = Product

Тогда это мой контроллер

async index ({response}) {
        const allProduct = await Cart.query().with('product').fetch();
        return response.json({
            status:true,
            data: allProduct
        })
    }

отредактировано

Это схема моей корзины

class CartSchema extends Schema {

  async up () {
    const exists = await this.hasTable('cart')

    if (!exists) {
      this.create('cart', (table) => {
        table.increments()
        table.string('id_product').unsigned().references('product_id').inTable('product')
        table.timestamps()
      })
    }
...

Иэто моя схема продукта:

class ProductSchema extends Schema {
    async up () {
    const exists = await this.hasTable('product')

    if (!exists) {
        this.create('product', (table) => {
          table.increments()
          table.timestamps()
        })
     }
...

данные продукта выше равны нулю. Что не так с этим кодом?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Отношение от Cart модели к Product равно belongsTo согласно вашей схеме.

Первичный ключ таблицы product равен id, а ссылочный ключ таблицы cart равенid_product согласно вашей схеме.

Сконфигурируйте свои отношения на cart модели для product следующим образом.

product() {
    return this.belongsTo("App/Models/Product", "id_product", "id");
}

Загрузите корзину с продуктами следующим образом

const cart = await Cart.query()
      .with("product")
      .fetch();
0 голосов
/ 02 октября 2019

вы получите нулевое значение из-за того, что, когда вы помещаете ссылку в Cartschema, этот тип данных не является строкой. изменить строку типа данных на целое число, подобное этому

class CartSchema extends Schema {

  async up () {
    const exists = await this.hasTable('cart')

    if (!exists) {
      this.create('cart', (table) => {
        table.increments() 
        table.integer('id_product').unsigned().references('product_id').inTable('product')
        table.timestamps()
      })
    }
...
...