我发现了一个递归树提取的例子,但是排序不起作用。在每个级别按顺序获取所有项目的最佳方法是什么?
模型
knex.schema.createTable('items', function (table) {
table.increments();
table.string('title');
table.integer('parent');
table.integer('order');
});
var Item = bookshelf.Model.extend({
tableName: 'items',
items: function() {
return this.hasMany(Item, 'parent');
}
});
递归,但只有一定数量的水平,所有都是首选,而不是指定深度。这有效,但没有正确订购相关项目。 Reference
Item.query({where: {parent: null}, orderBy: 'id'})
.fetchAll(
{
withRelated: ['items.items.items.items.items'],
orderBy: 'id'
});
修改
我正在使用适用于SQLite的递归查询来更新它(注意我使用id进行排序,因为我选择的列名称不好)。解决方案可能是使用书架进行crud操作,使用原始查询来填充我需要的对象。
with recursive tc( i )
as ( select id FROM items WHERE parent IS NULL
UNION SELECT id FROM items, tc WHERE items.parent = tc.i ORDER BY id
)
select * FROM items WHERE id IN tc;