Odoo/PHP: 如何在 API 调用中设置 "order by"?

Odoo/PHP: how can I set "order by" in API call?

使用 ripcord XML-RPC 客户端并进行如下调用,如何告诉它按哪个字段对记录进行排序?

$models = ripcord::client($cfg['url'] . '/xmlrpc/2/object');
$srch = $models->execute_kw($cfg['db'], $cfg['uid'], $cfg['pw'], 'account.move.line', 'search_read', array(array(array('account_id', '=', 174), array('date', '>=', '2016-01-01'))));

使用 Odoo 9 社区版。

signature of search_read是:

def search_read(self, cr, uid, domain=None, fields=None, offset=0, limit=None, order=None, context=None):

我对 PHP 不是很熟悉,但是这样的东西应该有用:

$models = ripcord::client($cfg['url'] . '/xmlrpc/2/object');
$srch = $models->execute_kw(
    $cfg['db'],
    $cfg['uid'],
    $cfg['pw'],
    'account.move.line',
    'search_read',
    array(
        array(
            array('account_id', '=', 174),
            array('date', '>=', '2016-01-01')
        ),
        NULL,
        NULL,
        NULL,
        'date desc, id',
    )
);

我们为 fieldsoffsetlimit 传递 NULL 以使用默认值,而 order 是以逗号分隔的字段列表排序。在上面的示例中,它将 return 移动行按 date 降序排序,然后按 id(如果某些移动行具有相同的日期)按升序排序。

对于那些从搜索引擎到达这里的人来说,python 中的相同语法将如下所示:

pickings = models.execute_kw(db, uid, pwd, 'stock.picking', 'search_read',
                          [[['state', '=', 'done'], ['date_done', '>', '2019-01-01']]],
                          {'fields':['name'], 'offset': 0, 'limit': 5, 'order': 'date_done desc'})