我遵循了Vuex ORM中Defining Relationships的指导。
我做了所有类似于指南的事情,那么为什么我在Article Model的category字段中得到空值?
这就是我定义模型的方式(文章类别为:hasOne / belongTo):
pipeline {
agent 'docker'
stages {
stage('Common pre') { ... }
stage('Build all platforms') {
parallel {
stage('Build, test and deploy for P1') {
agent {
dockerfile {
filename 'src/main/docker/Jenkins-P1.Dockerfile'
reuseNode true
}
}
steps {
sh buildit...
}
}
stage('Build, test and deploy for P2') {
agent {
dockerfile {
filename 'src/main/docker/Jenkins-P2.Dockerfile'
reuseNode true
}
}
steps {
sh buildit...
}
}
}
}
stage('Common post parallel') { ... }
}
}
在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")
};
}
}
中用vuex配置Vuex-orm:
main.js
在内部应用程序组件中,我拥有插入到vuex的数据并获得如下值:
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)]
});
答案 0 :(得分:0)
首先,文章与类别之间的关系很可能是一对多的关系,但是代码的问题在于定义模型和插入数据的方式。
在您的示例中,您尝试在关系目标上提供外键(我是文章,我知道我所属的类别ID)。这种关系是Vuex-ORM中的一对一逆关系。
为了获得预期的行为,请按以下方式更改Article
模型:
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
明确定义为Article模型上的单独字段,而不是指向Category模型上的id字段。在所有Vuex-ORM关系中,这都是相同的模式。 category
字段存储已解析的关系目标对象,因此您是目标类别对象。使用.with(Category)
查询后,该字段由Vuex-ORM填写,并且不应包含在您插入的数据中。
尽管并没有多大意义,但要修复原始示例并使用标准的一对一定义模型,如下所示:
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。