首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么vuex-orm在关系字段中返回null?

为什么vuex-orm在关系字段中返回null?
EN

Stack Overflow用户
提问于 2019-05-26 21:08:04
回答 1查看 1.2K关注 0票数 0

我在Vuex ORM中遵循了Defining Relationships的指南。

我做的所有事情都像指南一样,那么为什么我在文章模型的类别字段中得到空值?

codesandbox

这就是我如何定义我的模型(文章中的类别是: hasOne/belongTo):

代码语言:javascript
复制
export class Category extends Model {
  static entity = "categories";

  static primaryKey = "_id";

  static fields() {
    return {
      _id: this.attr(null),
      name: this.attr("")
    };
  }
}


export class Article extends Model {
  static entity = "articles";

  static primaryKey = "_id";

  static fields() {
    return {
      _id: this.attr(null),
      name: this.attr(""),
      category: this.hasOne(Category, "_id")
    };
  }
}

main.js中使用vuex配置Vuex-orm

代码语言:javascript
复制
import VuexORM from "@vuex-orm/core";
import { Article, Category } from "./models";

Vue.use(Vuex);

const database = new VuexORM.Database();

const Articles = {
  namespaced: true,

  actions: {
    test() {
      console.log(this);
    }
  }
};

const Categories = {
  namespaced: true,

  actions: {
    test() {
      console.log(this);
    }
  }
};

database.register(Article, Articles);
database.register(Category, Categories);

const store = new Vuex.Store({
  plugins: [VuexORM.install(database)]
});

在app组件中,我将数据插入到vuex中,并获得如下值:

代码语言:javascript
复制
 const articleData = [
      {
        _id: "6ce9bae00000000000000000",
        name: "article-1",
        category: "5ce9acd00000000000000000"
      }
    ];
    const categoryData = [
      { _id: "5ce9acd00000000000000000", name: "category-1" }
    ];

    const x = await Article.insertOrUpdate({ data: articleData });
    const y = await Category.insertOrUpdate({ data: categoryData });

    const a = Article.query()
      .with("category")
      .first();

    console.log({ a });
    console.log({ type: a.category });
    console.log("why a.category is null???");
EN

回答 1

Stack Overflow用户

发布于 2019-06-09 19:30:39

首先,文章和类别之间的关系可能是一对多的关系,但是代码的问题在于您定义模型和插入数据的方式。

在您的示例中,您试图在关系目标上提供一个外键(我是一篇文章,并且我知道我所属的类别id )。这种关系在Vuex-ORM中是一对一的反向关系。

为了获得预期的行为,请按如下方式更改您的Article模型:

代码语言:javascript
复制
export class Article extends Model {
  static entity = "articles";

  static primaryKey = "_id";

  static fields() {
    return {
      _id: this.attr(null),
      name: this.attr(""),
      category_id: this.attr(""),
      category: this.belongsTo(Category, "category_id")
    };
  }
}

请注意,您显式地将category_id定义为文章模型上的一个单独字段,而不是指向类别模型上的id字段。这在所有Vuex-ORM关系中都是相同的模式。category字段存储已解析的关系目标对象,因此您可以将类别对象作为目标。这是在使用.with(Category)查询之后由Vuex-ORM填写的,不应该包含在您插入的数据中。

尽管这没有多大意义,但修复原始示例并使用标准的一对一定义模型如下所示:

代码语言:javascript
复制
export class Article extends Model {
  static entity = "articles";

  static primaryKey = "_id";

  static fields() {
    return {
      _id: this.attr(null),
      name: this.attr(""),
      category: this.hasOne(Category, "article_id")
    };
  }
}

export class Category extends Model {
  static entity = "categories";

  static primaryKey = "_id";

  static fields() {
    return {
      _id: this.attr(null),
      name: this.attr(""),
      article_id: this.attr(null),
    };
  }
}

并在传递给Article.insertOrUpdate的数据中提供一个article_id。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档