bookshelf.js递归查询加上排序

时间:2017-03-24 03:31:24

标签: recursion knex.js bookshelf.js

我发现了一个递归树提取的例子,但是排序不起作用。在每个级别按顺序获取所有项目的最佳方法是什么?

模型

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;

0 个答案:

没有答案