cakephp 3无法按深度关联的数据排序
我们无法根据深度关联的数据对交易进行排序。大部分属于和有一个协会。此处需要/未找到的任何信息将立即发布。表: 业务连续性交易:cakephp 3无法按深度关联的数据排序,php,sorting,cakephp,pagination,cakephp-3.0,Php,Sorting,Cakephp,Pagination,Cakephp 3.0,我们无法根据深度关联的数据对交易进行排序。大部分属于和有一个协会。此处需要/未找到的任何信息将立即发布。表: 业务连续性交易: $this->belongsTo('Seller', [ 'className' => 'BcAccessCards', 'foreignKey' => 'seller', 'propertyName' => 'BcAccessCards', ]); $this->belongsTo('Buyer', [ '
$this->belongsTo('Seller', [
'className' => 'BcAccessCards',
'foreignKey' => 'seller',
'propertyName' => 'BcAccessCards',
]);
$this->belongsTo('Buyer', [
'className' => 'BcUsers',
'foreignKey' => 'buyer',
'propertyName' => 'BcUsers',
]);
BCA访问卡:
$this->belongsTo('BcUsers', [
'className' => 'BcUsers',
'foreignKey' => 'user',
'propertyName' => 'BcUsers'
]);
用户:
$this->hasOne('BcUserInfos', [
'className' => 'BcUserInfos',
'foreignKey' => 'user_id',
'dependent' => true,
'propertyName' => 'BcUserInfos'
]);
我们能够检索每个事务的所有关联数据:
$query = $bcTransactions->find('all', [
'conditions' => ['BcTransactions.company =' => $id],
'contain' => ['Seller', 'Seller.BcUsers', 'Seller.BcUsers.BcUserInfos', 'Buyer', 'Buyer.BcUserInfos'],
]);
查询返回完美的数据集,但在排序时:
$this->paginate = [
'contain' => ['Seller', 'Seller.BcUsers', 'Seller.BcUsers.BcUserInfos', 'Buyer', 'Buyer.BcUserInfos'],
'sortWhitelist' => [
'id',
'Buyer.BcUserInfos.firstname',
'Seller.BcUsers.BcUserInfos.firstname',
]
];
$this->paginate($query);
我们得到以下URL:?sort=Seller.BcUsers.BcUserInfos.firstname&direction=asc
例如,我们失败了,出现了一个错误:列未找到:1054未知列“Seller.BcUsers”在“order子句”中
我们理解错误的含义,但不知道如何修复它,如何按深度关联的数据进行排序。通过标识符进行排序
您似乎混淆了这一点,例如容器或关联过滤的工作方式,其中需要“路径”才能在PHP级别检索关联信息
排序不是这样工作的,它只发生在SQL级别,关联的表通过各自的别名连接在一起。它吃标识符,标识符只由别名和字段名组成,因此您只需引用关联字段,例如BcUserInfos.firstname
,而不是Seller.BcUsers.BcUserInfos.firstname
当加入单个查询时,别名必须是唯一的
另一个问题是存在重复的别名,即BcUserInfos
包含两次,这对1:1
关联不起作用,因为它们都包含在同一个SQL查询中
这很可能会导致问题,因为查询生成器没有包含这两个关联的名称冲突解决方案,而首先包含的关联将获胜,下面的关联将不被包含
您可能需要重命名这些表,添加其他表,或者甚至手动将表加入其中。通过标识符进行排序
您似乎混淆了这一点,例如容器或关联过滤的工作方式,其中需要“路径”才能在PHP级别检索关联信息
排序不是这样工作的,它只发生在SQL级别,关联的表通过各自的别名连接在一起。它吃标识符,标识符只由别名和字段名组成,因此您只需引用关联字段,例如BcUserInfos.firstname
,而不是Seller.BcUsers.BcUserInfos.firstname
当加入单个查询时,别名必须是唯一的
另一个问题是存在重复的别名,即BcUserInfos
包含两次,这对1:1
关联不起作用,因为它们都包含在同一个SQL查询中
这很可能会导致问题,因为查询生成器没有包含这两个关联的名称冲突解决方案,而首先包含的关联将获胜,下面的关联将不被包含
您可能需要重命名这些表,添加其他表,或者甚至手动将这些表加入